Mam List<String>
i muszę usunąć podlistę z tej listy. Czy są dostępne do tego metody listy w .NET 3.5?
Mam List<String>
i muszę usunąć podlistę z tej listy. Czy są dostępne do tego metody listy w .NET 3.5?
Odpowiedzi:
Chcesz List :: GetRange (firstIndex, count). Zobacz 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)
Czy tego szukasz?
Jeśli chcesz usunąć pozycje z listy podrzędnej z oryginalnej listy, możesz wykonać następujące czynności:
// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
list.Remove(t);
}
Czy byłoby to tak proste, jak uruchomienie zapytania LINQ na Twojej liście?
List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();
subList
z Javy, która eksponuje zmienny widok na oryginalną listę. To zachowuje się inaczej, co może nie być od razu oczywiste, więc pomyślałem, że warto byłoby to wskazać dla dobra każdego, kto zobaczy to później. Poza tematem, możesz chcieć zająć się jogą, medytacją lub czymś w tym rodzaju; oszalałeś bez jakiejkolwiek prowokacji.
Użyj klauzuli Where z 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");
W stwierdzeniach powyżej „p” jest obiektem znajdującym się na liście. Więc jeśli użyłeś obiektu danych, tj .:
public class Client
{
public string Name { get; set; }
}
wtedy twój linq wyglądałby tak:
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");
Z LINQ:
List<string> l = new List<string> { "1", "2", "3" ,"4","5"};
List<string> l2 = l.Skip(1).Take(2).ToList();
Jeśli potrzebujesz foreach, nie potrzebujesz ToList:
foreach (string s in l.Skip(1).Take(2)){}
Zaletą LINQ jest to, że jeśli chcesz po prostu pominąć jakiś wiodący element, możesz:
List<string> l2 = l.Skip(1).ToList();
foreach (string s in l.Skip(1)){}
tj. nie ma potrzeby dbania o liczbę / długość itp.
Twoja klasa kolekcji może mieć metodę, która zwraca kolekcję (podlistę) na podstawie kryteriów przekazanych w celu zdefiniowania filtru. Zbuduj nową kolekcję z pętlą foreach i rozdaj ją.
Lub użyj metody i pętli zmodyfikuj istniejącą kolekcję, ustawiając flagę (właściwość) „filtrowany” lub „aktywny”. Ten może działać, ale może również powodować problemy w kodzie wielowątkowym. Jeśli inne obiekty zależą od zawartości kolekcji, jest to dobre lub złe, w zależności od sposobu wykorzystania danych.
Odwróć elementy na liście podrzędnej
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));
Daje 0, 1, 4, 3, 2, 5, 6
Range
jest prawdziwe w przypadku typu danych typu integer. co, jeśli twój typ danych to DataTime
i chcesz pobrać listę rekordów między dwoma określonymi datami?