add chunk
This commit is contained in:
@@ -27,6 +27,12 @@ Cycle will run an action for every element in an IEnumerable. This will run fore
|
|||||||
|
|
||||||
this will print `1,2,3,4,1,2,3,4`
|
this will print `1,2,3,4,1,2,3,4`
|
||||||
|
|
||||||
|
## Chunk
|
||||||
|
|
||||||
|
Chunk will take the current array and make child arrays, setting the size of the child array to be the specified chunk size
|
||||||
|
|
||||||
|
`new List<int>() { 1,2,3,4,5,6}.Chunk(2))` => `[[1,2], [3,4] [5,6]]`
|
||||||
|
|
||||||
## ForEach
|
## ForEach
|
||||||
|
|
||||||
I hope I dont have to explain this one. `ListOfThings.ForEach(a=>a.DoSomething())`
|
I hope I dont have to explain this one. `ListOfThings.ForEach(a=>a.DoSomething())`
|
||||||
|
|||||||
@@ -74,5 +74,26 @@ namespace LinqRb.UnitTests
|
|||||||
var result = items.Distinct(a => a.Item1);
|
var result = items.Distinct(a => a.Item1);
|
||||||
Assert.True(result.Count() == 4);
|
Assert.True(result.Count() == 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestChunks()
|
||||||
|
{
|
||||||
|
var t = new List<string>();
|
||||||
|
var data = Enumerable.Range(1, 20).Select((a) => "ts").Chunk(4).ToList();
|
||||||
|
Assert.Equal(data.Count, 5);
|
||||||
|
foreach (var childData in data)
|
||||||
|
{
|
||||||
|
Assert.Equal(childData.Count(), 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestOddSizeChunks()
|
||||||
|
{
|
||||||
|
var t = new List<string>();
|
||||||
|
var data = Enumerable.Range(1, 22).Select((a) => "ts").Chunk(4).ToList();
|
||||||
|
Assert.Equal(data.Count, 6);
|
||||||
|
Assert.True(data.First(a => a.Count() < 4).Count() == 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,13 +15,6 @@
|
|||||||
},
|
},
|
||||||
"frameworks": {
|
"frameworks": {
|
||||||
"dnxcore50": {
|
"dnxcore50": {
|
||||||
|
|
||||||
},
|
|
||||||
"dnx50": {
|
|
||||||
|
|
||||||
},
|
|
||||||
"dnx451": {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,19 +22,22 @@ namespace System.Linq
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Break a list of items into chunks of a specific size
|
/// Break a list of items into chunks of a specific size
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunksize)
|
/// <param name="source"></param>
|
||||||
|
/// <param name="chunkSize">How big you wish your chunks to be</param>
|
||||||
|
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunkSize)
|
||||||
{
|
{
|
||||||
var enumerator = source.GetEnumerator();
|
var enumerator = source.GetEnumerator();
|
||||||
var arr = new List<T>(chunksize);
|
var arr = new List<T>(chunkSize);
|
||||||
while (enumerator.MoveNext())
|
while (enumerator.MoveNext())
|
||||||
{
|
{
|
||||||
arr.Add(enumerator.Current);
|
arr.Add(enumerator.Current);
|
||||||
if(arr.Count >= chunksize)
|
if (arr.Count >= chunkSize)
|
||||||
{
|
{
|
||||||
yield return arr;
|
yield return arr;
|
||||||
arr = new List<T>(chunksize);
|
arr = new List<T>(chunkSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
yield return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"description": "Add additional Linq extensions familiar to ruby ppl",
|
"description": "Add additional Linq extensions familiar to ruby ppl",
|
||||||
"authors": [ "Tommy Parnell" ],
|
"authors": [ "Tommy Parnell" ],
|
||||||
"tags": [ "Linq" ],
|
"tags": [ "Linq" ],
|
||||||
|
|||||||
Reference in New Issue
Block a user