example - Cómo conseguir un sublimista en C#
remarks c# (5)
Tengo una List<String>
y necesito quitar una lista secundaria de esta lista. ¿Hay algún método de lista disponible para esto en .NET 3.5?
¿Sería tan fácil como ejecutar una consulta LINQ en su lista?
List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();
Desea List :: GetRange (firstIndex, count). Consulte http://msdn.microsoft.com/en-us/library/21k0e39c.aspx
// I have a List called list
List sublist = list.GetRange(5, 5); // (gets elements 5,6,7,8,9)
List anotherSublist = list.GetRange(0, 4); // gets elements 0,1,2,3)
¿Es eso lo que buscas?
Si desea eliminar los elementos de la lista secundaria de la lista original, puede hacer lo siguiente:
// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
list.Remove(t);
}
Invertir los elementos en una sub-lista
int[] l = {0, 1, 2, 3, 4, 5, 6};
var res = new List<int>();
res.AddRange(l.Where((n, i) => i < 2));
res.AddRange(l.Where((n, i) => i >= 2 && i <= 4).Reverse());
res.AddRange(l.Where((n, i) => i > 4));
Da 0,1,4,3,2,5,6.
Su clase de colección podría tener un método que devuelva una colección (una sublista) basada en los criterios pasados para definir el filtro. Construye una nueva colección con el bucle foreach y pásala.
O bien, haga que el método y el bucle modifiquen la colección existente estableciendo una bandera (propiedad) "filtrada" o "activa". Este podría funcionar pero también podría causar problemas en el código de multiproceso. Si otros objetos dependen del contenido de la colección, esto puede ser bueno o malo dependiendo de cómo utilice los datos.
Use la cláusula Where de LINQ:
List<object> x = new List<object>();
x.Add("A");
x.Add("B");
x.Add("C");
x.Add("D");
x.Add("B");
var z = x.Where(p => p == "A");
z = x.Where(p => p == "B");
En las declaraciones anteriores, "p" es el objeto que está en la lista. Así que si usaste un objeto de datos, es decir:
public class Client
{
public string Name { get; set; }
}
entonces tu linq se vería así:
List<Client> x = new List<Client>();
x.Add(new Client() { Name = "A" });
x.Add(new Client() { Name = "B" });
x.Add(new Client() { Name = "C" });
x.Add(new Client() { Name = "D" });
x.Add(new Client() { Name = "B" });
var z = x.Where(p => p.Name == "A");
z = x.Where(p => p.Name == "B");