![LINQでList<T>をList<List<T>>に変換する](/_next/image?url=https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F637a154d3e1c433dadd7561517c3541d%2F5abd2f7a22464eff92afe2c0cc2ad08b%2Fc-sharp.png&w=3840&q=75)
C#
Published
Updated
LINQでList<T>をList<List<T>>に変換する
// 1~100が入ったリストを作成
var baseList = new List<int>();
baseList.AddRange(Enumerable.Range(1, 100));
//10ずつに分割
var separateCount = 10;
var itemListList = baseList.Select((v, i) => new { v, i }).GroupBy(x => x.i / separateCount).Select(g => g.Select(x => x.v).ToList()).ToList();
foreach (var itemList in itemListList)
{
Console.WriteLine("hoge");
foreach (var item in itemList)
{
Console.WriteLine(item);
}
Console.WriteLine("fuga");
}
出力結果
hoge
1
2
3
4
5
6
7
8
9
10
fuga
hoge
11
12
13
14
15
16
17
18
19
20
fuga
hoge
21
22
...省略
こうするとランダムに並び替えたうえで分割することができる
var itemListList = baseList.OrderBy(x => Guid.NewGuid()).Select((v, i) => new { v, i }).GroupBy(x => x.i / separateCount).Select(g => g.Select(x => x.v).ToList()).ToList();
追記
.NET6で追加されたChunkメソッドを使用するともっと簡単に書ける
//10ずつに分割
var itemListList = Enumerable.Range(1, 100).Chunk(10);