首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中枚举集合的子集吗?

在C#中枚举集合的子集吗?
EN

Stack Overflow用户
提问于 2009-05-19 20:00:01
回答 6查看 6.2K关注 0票数 13

有没有一种很好的方法来在C#中只枚举集合的一个子集?也就是说,我有一个包含大量对象(比如1000个)的集合,但我只想枚举250 - 340个元素。有没有一种好的方法来获得集合的子集的枚举数,而不使用另一个集合?

编辑:应该提到它使用的是.NET Framework2.0。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-19 20:01:37

请尝试以下操作

代码语言:javascript
运行
复制
var col = GetTheCollection();
var subset = col.Skip(250).Take(90);

或者更一般地说

代码语言:javascript
运行
复制
public static IEnumerable<T> GetRange(this IEnumerable<T> source, int start, int end) {
  // Error checking removed
  return source.Skip(start).Take(end - start);
}

编辑 2.0解决方案

代码语言:javascript
运行
复制
public static IEnumerable<T> GetRange<T>(IEnumerable<T> source, int start, int end ) {
  using ( var e = source.GetEnumerator() ){ 
    var i = 0;
    while ( i < start && e.MoveNext() ) { i++; }
    while ( i < end && e.MoveNext() ) { 
      yield return e.Current;
      i++;
    }
  }      
}

IEnumerable<Foo> col = GetTheCollection();
IEnumerable<Foo> range = GetRange(col, 250, 340);
票数 39
EN

Stack Overflow用户

发布于 2009-05-19 20:08:10

我喜欢保持简单(如果您不一定需要枚举器):

代码语言:javascript
运行
复制
for (int i = 249; i < Math.Min(340, list.Count); i++)
{
    // do something with list[i]
}
票数 3
EN

Stack Overflow用户

发布于 2009-05-19 20:11:22

将Jared的原始代码改编为.Net 2.0:

代码语言:javascript
运行
复制
IEnumerable<T> GetRange(IEnumerable<T> source, int start, int end)
{
    int i = 0;
    foreach (T item in source)
    {
        i++;
        if (i>end) yield break;
        if (i>start) yield return item;
    }
}

并使用它:

代码语言:javascript
运行
复制
 foreach (T item in GetRange(MyCollection, 250, 340))
 {
     // do something
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/884732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档