es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtrar una lista con filtros añadidos dinámicamente.

Estoy intentando filtrar una lista de personas donde los filtros pueden cambiar dinámicamente. Por lo tanto, en el momento en que quiero filtrar por género y rol, doy esos dos filtros. En el momento en que quiero cambiar esto solo por rol o cambiar el valor del rol, se debe realizar otro filtrado en la lista con el nuevo filtro. Tan pronto como se realiza el filtrado, se verifica si la persona cumple con todos los filtros. Por lo tanto, por ejemplo, se hace el filtrado por género con el valor true y el número de rol 4. Luego, solo se devuelve la persona ‘Meike’.

He intentado el siguiente código. Este código agrega a cada persona nuevamente en cuanto cumple con cada filtro individual, por lo que es posible que una persona aparezca dos veces en la lista. Por supuesto, esto se puede resolver verificando si ya existe en la lista, pero me pregunto si el siguiente código es ‘la forma de hacer’ para este problema.

Dictionary<string, object> _filter = new();

List _people = new List();

_people.Add(new Person(1, “Bram”, false, 4));
_people.Add(new Person(2, “Harry”, false, 4));
_people.Add(new Person(3, “Meike”, true, 4));
_people.Add(new Person(4, “Lisa”, true, 3));

Console.WriteLine(“¡Hola mundo!”);

List secondPersonList = new();
Dictionary<string, object> secondFilter = new();
secondFilter.Add(“Gender”, true);
secondFilter.Add(“Role”, 3);

foreach (var filter in secondFilter)
{
if(filter.Key == “Gender”)
{
foreach (var person in _people.FindAll(x => x.Gender == (bool)filter.Value))
secondPersonList.Add(person);
}

if (filter.Key == "Role")
{
    foreach (var person in _people.FindAll(x => x.Role == (int)filter.Value))
        secondPersonList.Add(person);
}

}

Console.WriteLine(“Filtros múltiples”);
foreach(Person person in secondPersonList)
{
Console.WriteLine($”Id: {person.Id}, Nombre: {person.Name}”);
}

Clase Persona:

internal class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool Gender { get; set; }
public int Role { get; set; }

public Person(int id, string name, bool gender, int role)
{
    Id = id;
    Name = name;
    Gender = gender;
    Role = role;
}

}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    El código proporcionado es una solución válida para el problema. Sin embargo, es posible mejorar el código verificando si la persona ya existe en la lista antes de agregarla. Esto se puede hacer utilizando el método Contains de la clase List.

    Por ejemplo, el siguiente código se puede utilizar para comprobar si la persona existe en la lista antes de agregarla:


    if (!secondPersonList.Contains(person))
    {
    secondPersonList.Add(person);
    }

Comments are closed.