У меня есть, List<String>
и мне нужно удалить подсписок из этого списка. Есть ли для этого какие-либо методы List в .NET 3.5?
У меня есть, List<String>
и мне нужно удалить подсписок из этого списка. Есть ли для этого какие-либо методы List в .NET 3.5?
Ответы:
Вам нужен List :: GetRange (firstIndex, count). См. 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)
Это то, что тебе нужно?
Если вы хотите удалить элементы подсписка из исходного списка, вы можете сделать:
// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
list.Remove(t);
}
Было бы так же просто, как выполнить запрос LINQ в вашем списке?
List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();
subList
Java, которое предоставляет изменяемое представление в исходный список. Это ведет себя по-другому, что может быть не сразу очевидно, поэтому я подумал, что было бы полезно указать на это для пользы всех, кто увидит это позже. Не по теме, возможно, вы захотите заняться йогой или медитацией или чем-то еще; Вы без всякой провокации сошли с ума до красного в лицо.
Используйте предложение Where из 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");
В приведенных выше утверждениях «p» - это объект, который находится в списке. Итак, если вы использовали объект данных, то есть:
public class Client
{
public string Name { get; set; }
}
тогда ваш linq будет выглядеть так:
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");
С LINQ:
List<string> l = new List<string> { "1", "2", "3" ,"4","5"};
List<string> l2 = l.Skip(1).Take(2).ToList();
Если вам нужен foreach, то ToList не нужен:
foreach (string s in l.Skip(1).Take(2)){}
Преимущество LINQ в том, что если вы хотите просто пропустить какой-либо ведущий элемент, вы можете:
List<string> l2 = l.Skip(1).ToList();
foreach (string s in l.Skip(1)){}
т.е. не нужно заботиться о количестве / длине и т. д.
У вашего класса коллекции может быть метод, который возвращает коллекцию (подсписок) на основе критериев, переданных для определения фильтра. Создайте новую коллекцию с помощью цикла foreach и передайте ее.
Или попросите метод и цикл изменить существующую коллекцию, установив «отфильтрованный» или «активный» флаг (свойство). Это могло работать, но могло также вызвать проблемы в многопоточном коде. Если другие объекты зависят от содержимого коллекции, это либо хорошо, либо плохо, в зависимости от того, как вы используете данные.
Поменяйте местами элементы в подсписке
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));
Дает 0,1,4,3,2,5,6
Range
верно для целого типа данных. что, если ваш тип данных - DataTime
и вам нужно получить список записей между двумя конкретными датами?