Tengo una List<String>
y necesito sacar una sublista de esta lista. ¿Hay algún método de lista disponible para esto en .NET 3.5?
Tengo una List<String>
y necesito sacar una sublista de esta lista. ¿Hay algún método de lista disponible para esto en .NET 3.5?
Respuestas:
Quieres List :: GetRange (firstIndex, count). Ver 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 está buscando eliminar los elementos de la sublista 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);
}
¿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();
subList
Java, que expone una vista mutable en la lista original. Esto se comporta de manera diferente, lo que podría no ser obvio de inmediato, por lo que pensé que sería útil señalarlo en beneficio de cualquiera que lo vea más adelante. Fuera del tema, es posible que desee comenzar a practicar yoga o meditación o algo; pasaste 0 a la locura enrojecida sin provocación alguna.
Utilice 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. Entonces, si usó 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");
Con LINQ:
List<string> l = new List<string> { "1", "2", "3" ,"4","5"};
List<string> l2 = l.Skip(1).Take(2).ToList();
Si necesita foreach, entonces no necesita ToList:
foreach (string s in l.Skip(1).Take(2)){}
La ventaja de LINQ es que si solo desea omitir algún elemento principal, puede:
List<string> l2 = l.Skip(1).ToList();
foreach (string s in l.Skip(1)){}
es decir, no es necesario ocuparse del recuento / longitud, etc.
Su clase de colección podría tener un método que devuelva una colección (una sublista) según los criterios pasados para definir el filtro. Construya una nueva colección con el bucle foreach y distribúyala.
O haga que el método y el ciclo modifiquen la colección existente estableciendo una marca (propiedad) "filtrada" o "activa". Este podría funcionar, pero también podría causar problemas en el código multiproceso. Si otros objetos se basan en el contenido de la colección, esto es bueno o malo dependiendo de cómo use los datos.
Invertir los elementos de una sublista
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
Range
es verdadero con el tipo de datos entero. ¿Qué pasa si su tipo de datos es DataTime
y necesita recuperar una lista de registros entre dos fechas específicas?