No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

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 48

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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 “ey, 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

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).

**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.

Voy a dejar este curso hasta aquí, la verdad muy confuso desde el inicio, el usar variables muy parecidas como Escuela y escuela o Cursos y cursos es muy confuso

Todo un Predicamento
… lo que se da cerca del minuto 6:45 es un claro ejemplo 🤪 de por lo que pasamos los desarrolladores en la soledad de nuestro predicamento vocacional frente a una pantalla y un teclado en esas largas horas de madrugada … ayuda tener cerca un rubber duck con quien charlar y aclarar nuestros algoritmos e implementaciones y en muchas ocasiones nos hablará al oído con la respuesta de ese punto-y-coma faltante en la línea 254 del archivo con 100 líneas de código, pero sí … #hastaEnLasMejoresFamilias 💚 jajajaj

He aquí mis notitas de la clase:

para lo del predicado yo lo entendí así:
la condición es “si el curso es del turno de la mañana(TiposTurno.Mañana), bórralo”

el predicado recorre los elementos de la colección y en mi caso el curso “101” y “102” son de la mañana y devuelve un valor “true”

y ya uniendo RemoveAll ** con el predicado, este borra todo lo que tenga el turno de la mañana == true**
espero haberme explicado bien 😃

escuela.Cursos = new List<Curso>()
            {
                new Curso() { Nombre="101", Turno = TiposTurno.Mañana },
                new Curso() { Nombre="201", Turno = TiposTurno.Tarde },
                new Curso() { Nombre="301", Turno = TiposTurno.Noche },
            };

            escuela.Cursos.Add(new Curso()
            {
                Nombre = "102",
                Turno = TiposTurno.Mañana
            });

escuela.Cursos.RemoveAll(borrarPrueba =>
                borrarPrueba.Turno == TiposTurno.Mañana
            );

Wow, lo volvere a ver eso del predicado algo confuso

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

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

Estoy conectado con el profe! ♥

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

Interesante!

Muy interesante

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 “remove”

Jajajajaja cual curso quieren que borremos? si ese los estoy escuchando, estuvo bueno el chiste :D :D
escuela.Cursos.RemoveAll(c => c.Nombre == "301");

Me maree algo con esta clase 😓😓 pero seguiré intentándolo .

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);>

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

por que en el párametro “cantidad” hay que poner “cantidad:10” para que suene?

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.