如何在C#中获取子列表

Tho*_*lil 76 .net c# list .net-3.5 sublist

我有一个List<String>,我需要从这个列表中取一个子列表.在.NET 3.5中是否有可用于此的列表方法?

Jos*_*osh 109

你想要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)
Run Code Online (Sandbox Code Playgroud)

这就是你要追求的吗?

如果您要从原始列表中删除子列表项,则可以执行以下操作:

// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
    list.Remove(t);
}
Run Code Online (Sandbox Code Playgroud)

  • 使用foreach迭代它们时,您无法从列表中删除项目.....! (4认同)
  • 猛击者;我正在遍历列表 'b',同时从列表 'a' 中删除。这是合法的:) (2认同)

p.c*_*ell 6

它会像在列表上运行LINQ查询一样简单吗?

List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 我([像其他人一样](http://stackoverflow.com/questions/1287340/net-equivalent-of-javas-list-sublist))从Java中寻找类似于`subList`的东西,它暴露了一个可变的查看原始列表.这种行为有所不同,这可能不会立即显而易见,所以我认为指出它有利于后来看到这个的任何人.关于主题,你可能想要接受瑜伽或冥想或其他事情; 在没有任何挑衅的情况下,你去了0面对面. (8认同)
  • 这是原始列​​表的片段的副本,而不是原始列表的一部分的视图。 (2认同)

jw_*_*jw_ 6

使用 LINQ:

List<string> l = new List<string> { "1", "2", "3" ,"4","5"};
List<string> l2 = l.Skip(1).Take(2).ToList();
Run Code Online (Sandbox Code Playgroud)

如果您需要 foreach,则不需要 ToList:

foreach (string s in l.Skip(1).Take(2)){}
Run Code Online (Sandbox Code Playgroud)

LINQ 的优点是,如果您只想跳过某些前导元素,您可以:

List<string> l2 = l.Skip(1).ToList();
foreach (string s in l.Skip(1)){}
Run Code Online (Sandbox Code Playgroud)

即无需关心计数/长度等。