podzielenie listy ?

PO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 92
0

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 :)

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 475
1

Gotowy kod znaleziony na SO

Kopiuj
/// <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();
    }
}
somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

Ja bym pomyślał o użyciu metod Skip i Take.
Albo w ogóle zrobił to "klasycznie", ze względu na wydajność.

PO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 92
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 :)

NE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 187
0

To oznacza, że mając obiekt-listę, możesz tę metodę wywołać na tym obiekcie:

Kopiuj
List<int> numbers = ...
List<List<int>> splitNumbers = numbers.ChunkBy(10);

Poszukaj w Google: extension method.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.