2021.1.14

連続した数値でグループ分けする方法(Linq)

連続した数値が格納された配列のデータを元に、空き番を区切りとしてグループ分けする方法についてです。

コード

コードは以下の通り。


int[] arr = {
    1, 2, 3,
    5, 6,
    9,
    13, 14, 15, 16 };

var groups = arr
    .Select((no, index) => new { no, index })
    .GroupBy(x => x.no - x.index, x => x.no);

foreach (var g in groups)
{
    Console.WriteLine(string.Join(",", g));
}

上記のコードを実行すると、以下のようにグループ分けされた数値が出力されます。


1,2,3
5,6
9
13,14,15,16

パッと見は何をやっているのかよく分かりませんが、「配列のデータ(番号) - 配列のインデックス」をグループのキーとすることで、連続した数値は同じキーとなり、空き番があればあるほどキーとなる数値がズレていきます。

参考リンク

C#】関連記事