Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Enumerate through a subset of a Collection in C#?

Is there a good way to enumerate through only a subset of a Collection in C#? That is, I have a collection of a large number of objects (say, 1000), but I'd like to enumerate through only elements 250 - 340. Is there a good way to get an Enumerator for a subset of the collection, without using another Collection?

Edit: should have mentioned that this is using .NET Framework 2.0.

like image 889
Paul Sonier Avatar asked May 19 '09 20:05

Paul Sonier


1 Answers

Try the following

var col = GetTheCollection();
var subset = col.Skip(250).Take(90);

Or more generally

public static IEnumerable<T> GetRange(this IEnumerable<T> source, int start, int end) {
  // Error checking removed
  return source.Skip(start).Take(end - start);
}

EDIT 2.0 Solution

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);
like image 166
JaredPar Avatar answered Sep 22 '22 17:09

JaredPar