如何在C#中获取子列表

我有一个List<String> ,我需要从这个列表中取出一个子列表。 在.NET 3.5中有没有可用的List的任何方法?

你想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(); 

使用LINQ中的Where子句:

 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"); 

您的集合类可以有一个方法,根据传入的标准返回一个集合(子列表)来定义filter。 使用foreach循环构build一个新的集合并将其传递出去。

或者,让方法和循环通过设置“过滤”或“活动”标志(属性)来修改现有的集合。 这一个可以工作,但也可能会导致multithreading代码中的麻烦。 如果其他对象在集合的内容上有所差异,则取决于您如何使用数据,这可能是好的还是坏的。

颠倒子列表中的项目

 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