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