泥庭

2014年12月3日

条件に合致する連続するデータをグループ化する(LINQ)

Filed under: .NET, LINQ — タグ: , — yone64 @ 11:18 PM

タイトルだけ見てもなんこのとやらな感じはしますが、たとえばこんな感じです。

{ 0, 1, 2, 3, 4, 3, 2, 3, 4, 5, 1, 5, 4, 2 }

のような適当数列があった場合に、「3以上の数値」という条件で連続データをグループ化し、

{ { 3, 4, 3 }, { 3, 4, 5 }, { 5, 4 } }

という、数列グループを取得するものをLINQで作りたいと思います。

以前の、連勝数を数えるSQLに近い感じですね。

var source = new[] { 0, 1, 2, 3, 4, 3, 2, 3, 4, 5, 1, 5, 4, 2 };
var result = source.Select((d, i) => new {d, i})
                    .Where(a => a.d >= 3)
                    .Select((a, i) => new {a.d, i = a.i - i})
                    .GroupBy(a => a.i, a => a.d);

var str = "{" + string.Join(",", result.Select(g => " {" + string.Join(",", g.Select(i => " " + i)) + " }")) + " }";
Console.WriteLine(str);

これで、以下のような出力が得られます。

{ { 3, 4, 3 }, { 3, 4, 5 }, { 5, 4 } }

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。