A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Removiendo y buscando objetos en colecciones

23/32
Recursos

Para eliminar un objeto especifico de una colecci贸n podemos hacerlo mediante referencia que es pas谩ndole al m茅todo Remove la variable del objeto a eliminar, o tambi茅n indicando el 铆ndice del objeto que queremos eliminar con el m茅todo RemoveAt.

El m茅todo RemoveAll pide como par谩metro un Predicate el cual es una funci贸n que solamente va a regresar valores Bool y se va a ejecutar en cada elemento de la colecci贸n, de igual forma la funci贸n va a recibir como par谩metro un elemento de la colecci贸n y en caso de que la condici贸n regrese un valor de true entonces el objeto se va a borrar.

Aportes 41

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Para mi es m谩s f谩cil entender algo si se descompone en partes m谩s sencillas. La definici贸n de delegado es la siguiente: ** lo que se afirma o se niega de un sujeto en una proposici贸n.**

Llevado esto a programaci贸n quiere decir que va a ver algo, en este caso es un m茅todo que me va a definir si mi sujeto (el curso 301) es el que quiero borrar de una lista (en este caso la lista de cursos)

Para lo anterior se usa un delegado (delegar es cambiar la responsabilidad de algo a alguien) ya que el m茅todo no va a saber por si solo qu茅 va a removerse, por ello se delega a nosotros la responsabilidad de eliminar ese curso, y, para hacerse esto efectivo el delegado nos dice 鈥渆y, para que yo le borre un curso, usted me tiene que decir si es o no es lo que est谩 en la lista鈥

Buenos d铆as, hago este aporte dado que me iba resultando un poco complicado entender el tema de la utilizaci贸n del metodo RemoveAll(Predicado) y el tema de delegados, a mi parecer se cruzaron dos temas al tiempo y me lo hizo mas complicado, comparto 茅sto por si a alguien m谩s le paso:

  1. Utilizaci贸n de RemoveAll para una colecci贸n:

     	//Funci贸n Predicado encargada de devolver TRUE o FALSE cuando el elemento de la colecci贸n cumpla con una condici贸n, luego se eliminar谩.
    
     private static bool predicado(curso obj){
         		return obj.Nombre=="Quinto 3";
     	}
    
     //RemoveAll => requiere de la definici贸n de un m茅todo que evalu茅 las condiciones de eliminaci贸n
     Escuela.cCursos.RemoveAll(predicado);
    
  2. Delegados: Especifican que par谩metros de Entrada y de Salida debe tener una funci贸n, Ejemplo (Pasos):

    a. Definici贸n del delegado:
    //PablaClave<tipoDatoEntrada> nomDelegado = metodoDelDelegado;
    Predicate<string> isUpper = IsUpperCase;

    b. Definici贸n del m茅todo que solo retorna TRUE or FALSE => Eval煤a una condici贸n
    static bool IsUpperCase(string str){
    return str.Equals(str.ToUpper());
    }

    c. Uso del delegado, result ser谩 igual a true dado que es un String el par谩metro pasado:

     bool result = isUpper("hello world!!"); 
    

Saludos.

Esto ser铆a la forma de hacer un select delete where pero en C# 馃槢

Para los que no entiendan lo de predicado y tienen conocimientos b谩sicos de Javascript pueden relacionarlo con el funcionamiento de la funci贸n find()

Dejo otro ejemplo que me funciono averiguando un poco el funcionamiento de RemoveAll

objetoEscuela.Cursos.RemoveAll(otraColeccion => otraColeccion.Nombre == "203");

Es un poco Confuso el uso del predicado en este contexto

**Predicate<T> **es una construcci贸n funcional que proporciona una manera conveniente de probar b谩sicamente si algo es cierto de un objeto T dado.

Espero sus correcciones :

  • Predicado : Es una funci贸n en la cual se define una condici贸n bajo la cual se va remover cierto objeto de una colecci贸n.

  • Delegado : Especifica que par谩metros de entrada tiene una funci贸n , as铆 mismo que se debe obtener en la misma (Salida).

Esto se me parece a lo que en javascript conocemos como callback

Estoy conectado con el profe! 鈾

Wow, lo volvere a ver eso del predicado algo confuso

Interesante el tema de los delegados, la verdad no lo hab铆a entendido tan claro como ahora. Gracias.

Interesante!

Muy interesante

Excelente clase.

馃く

Muy bueno

El delegado es similar a los Callbacks de Javascript.
Un poco confuso de entender el tema a simple vista.

Lista vista en el curso

<List<int> numeros = newList<int>();>
Como agregar datos

<numeros.Add(1);>
Eliminar datos en List

<numeros.RemoveAt(0);>

Que enredada con eso de Predicado 馃槮 , me toco verlo dos veces para entender

Excelente, es un tema complejo, pero cuando entiendes la l贸gica se vuelve sencillo.

por que en el p谩rametro 鈥渃antidad鈥 hay que poner 鈥渃antidad:10鈥 para que suene?

Tengo una serie de inconvenientes con el VSC espero que alguien pueda ayudarme:

como se puede ver hay algunas opciones que no me muestra como el 鈥渞emove鈥

Buenas clases

muy buena clase

jajaja :V Me alegro el d铆a con su risa, y su actitud xd xd

good class

No entendi lo del delegado 馃槮

para remover varios cursos:

return curobj.Nombre == "301" || curobj.Nombre == "502" || curobj.Jornada == TiposJornada.Ma帽ana;

Para eliminar un objeto especifico de una colecci贸n podemos hacerlo mediante referencia que es pas谩ndole al m茅todo Remove la variable del objeto a eliminar, o tambi茅n indicando el 铆ndice del objeto que queremos eliminar con el m茅todo RemoveAt.

El m茅todo RemoveAll pide como par谩metro un Predicate el cual es una funci贸n que solamente va a regresar valores Bool y se va a ejecutar en cada elemento de la colecci贸n, de igual forma la funci贸n va a recibir como par谩metro un elemento de la colecci贸n y en caso de que la condici贸n regrese un valor de true entonces el objeto se va a borrar.

Muy bien detallado el uso de los delegados excelente muy bien

Pens茅 301, me ley贸 la mente jajajjaj

HashCode 鈫 el hash es un propiedad de todos los objetos de .Net, es un identificador del objeto; cuando se emplea el m茅todo Remove de las colecciones esto lo que hace es comparar los objetos por su hashcode para identificar cual es el que debe eliminar

"Si, los estoy escuchando"
jajajajajaja

Para este ejemplo se crear谩 una demostraci贸n de agregar un nuevo elemento para luego explicarlo

Curso tmp= new Curso { Nombre="101-Vacacional",Jornada=TiposJornada.Noche};

Posterior a eso adicionamos uno solo en lugar de un rango

escuela.Cursos.Add(tmp);

Se imprime para verificar si se ha a帽adido

ImprimirCursosEscuela(escuela);

Y luego se lo elimina pas谩ndole el par谩metro del valor a帽adido para hacer la posterior verificaci贸n

escuela.Cursos.Remove(tmp)

Ahora podemos usar el m茅todo RemoveAll pero este tiene una particularidad que recibe un par谩metro que es predicate al declarar este m茅todo podemos crear con Ctrl + . quedando as铆

private static bool Predicado(Curso curobj)
    {
     return curobj.Nombre=="301";
    }

Lo que se hace aqu铆 es pasar el par谩metro de nombre 301 y este es el que ser谩 eliminado

Tambi茅n este procedimiento se lo puede hacer como pas谩ndo par谩metros una funci贸n pero en C# se lo hace con seguridad es decir tiene que recibir y enviar el par谩metro del tipo que se establece

  Predicate<Curso> miAlgoritmo= Predicado;

	escuela.Cursos.RemoveAll(miAlgoritmo);
 private static bool PredicadoOtro(Curso curobj)
    {
     return curobj.Nombre=="301";
    }

Muy entendible, si ya conoces Javascript, esta sintaxis se te har谩 muy facil de comprender.

escuela.Cursos
	.RemoveAll((Curso c) => {return c.Nombre == "Personal";});

profe, si la probabilidad es minima, porque me dio lo mismo que a usted?

Un delegado me especifica que parametros de entrada y que parametros de salida, tiene que terner una funcion, es boolean. Funciones como parametros.

muy interesante, podemos buscar objetos por medio de patrones de recorrido parcial.