5 ответов:
вы хотите список:: 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();
используйте предложение 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");
ваш класс коллекции может иметь метод, который возвращает коллекцию (подсписок) на основе критериев, переданных для определения фильтра. Создайте новую коллекцию с циклом 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
Comments