Witajcie, jeszcze raz. Mam pytanie - w jaki sposób mogę podzielić elementy , np po 10 czy też 20 sztuk mając jakąś kolekcję - powiedzmy listę , która zawiera na przykład 150 elementów? Znając z góry ilość elementów, np 100 , mogę stworzyć 10 list i wrzucać tam po 10 elementów. Ale co w wypadku gdybym miał 10 000 lub wiele więcej elementów i chciał z nich stworzyć listy po 100? Do głowy przychodzi mi grupBy , ale nie wiem w jaki sposób na sztywno określić że ma to być 10 elemtnów. Z góry dzięki za pomoc :)
0
1
Gotowy kod znaleziony na SO
/// <summary>
/// Helper methods for the lists.
/// </summary>
public static class ListExtensions
{
public static List<List<T>> ChunkBy<T>(this List<T> source, int chunkSize)
{
return source
.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / chunkSize)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}
}
0
Ja bym pomyślał o użyciu metod Skip
i Take
.
Albo w ogóle zrobił to "klasycznie", ze względu na wydajność.
0
Somepublic, mógłbyś rzucić przykładem?
Poza tym , mógłby ktoś wytłumaczyć co oznacza zapis ? : "public static List<List<T>> ChunkBy<T>(this List<T> source, int chunkSize) "
Chciałem po prostu użyć metody dla zwykłej listy. Tak by zrobić z niej jakieś sublisty :)
0
To oznacza, że mając obiekt-listę, możesz tę metodę wywołać na tym obiekcie:
List<int> numbers = ...
List<List<int>> splitNumbers = numbers.ChunkBy(10);
Poszukaj w Google: extension method.