KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Context: C# 3.0, .Net 3.5 Suppose I have a method that generates random numbers (forever): private static IEnumerable<int> RandomNumberGenerator() { while (true) yield return GenerateRandomNumber(0, 100); } I need to group those numbers in groups of 10, so I would like something like: foreach (IEnumerable<int> group in RandomNumberGenerator().Slice(10)) { Assert.That(group.Count() == 10); } I have defined Slice method, but I feel there should be one already defined. Here is my Slice method, just for reference: private static IEnumerable<T[]> Slice<T>(IEnumerable<T> enumerable, int size) { var result = new List<T>(size); foreach (var item in enumerable) { result.Add(item); if (result.Count == size) { yield return result.ToArray(); result.Clear(); } } } Question: is there an easier way to accomplish what I'm trying to do? Perhaps Linq? Note: above example is a simplification, in my program I have an Iterator that scans given matrix in a non-linear fashion. EDIT: Why Skip + Take is no good. Effectively what I want is: var group1 = RandomNumberGenerator().Skip(0).Take(10); var group2 = RandomNumberGenerator().Skip(10).Take(10); var group3 = RandomNumberGenerator().Skip(20).Take(10); var group4 = RandomNumberGenerator().Skip(30).Take(10); without the overhead of regenerating number (10+20+30+40) times. I need a solution that will generate exactly 40 numbers and break those in 4 groups by 10.
Tags (comma-separated)
Save Edits
Cancel