В этой статье блога мы рассмотрим различные методы разделения списка на подсписки с помощью LINQ в C#. Мы рассмотрим различные сценарии и предоставим примеры кода, которые помогут вам понять и реализовать эти методы. Итак, давайте углубимся и научимся профессионально разделять списки!
Метод 1: использование методов Takeи Skip.
Один из самых простых способов разбить список на подсписки — использовать Takeи Skip, предоставляемые LINQ. Метод Takeпозволяет нам извлечь указанное количество элементов из начала списка, а метод Skipпропускает указанное количество элементов из начала списка.
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var sublistSize = 3;
var sublists = Enumerable.Range(0, (int)Math.Ceiling(numbers.Count / (double)sublistSize))
.Select(i => numbers.Skip(i * sublistSize).Take(sublistSize))
.ToList();
Метод 2. Использование метода GroupBy
Метод GroupByLINQ позволяет нам группировать элементы на основе определенного критерия. Мы можем использовать этот метод, чтобы разделить список на подсписки в зависимости от желаемого размера группы.
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var sublistSize = 3;
var sublists = numbers.Select((number, index) => new { number, index })
.GroupBy(x => x.index / sublistSize)
.Select(group => group.Select(x => x.number).ToList())
.ToList();
Метод 3: использование метода расширения Partition.
Если вы предпочитаете более лаконичный подход, вы можете создать собственный метод расширения под названием Partition, который разбивает список на подсписки. Этот метод инкапсулирует логику и позволяет повторно использовать ее в разных проектах.
public static class EnumerableExtensions
{
public static IEnumerable<List<T>> Partition<T>(this IEnumerable<T> source, int size)
{
var list = new List<T>(size);
foreach (var item in source)
{
list.Add(item);
if (list.Count == size)
{
yield return list;
list = new List<T>(size);
}
}
if (list.Count > 0)
{
yield return list;
}
}
}
// Usage:
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var sublistSize = 3;
var sublists = numbers.Partition(sublistSize).ToList();
В этой статье мы рассмотрели несколько методов разделения списка на подсписки с помощью LINQ в C#. Предпочитаете ли вы использовать методы Takeи Skip, метод GroupByили создать собственный метод расширения, например Partition, теперь в вашем распоряжении множество техник. С помощью этих примеров кода и пояснений вы можете уверенно разбивать списки на подсписки в соответствии с вашими конкретными требованиями. Приятного кодирования!