C#で配列を先頭から連続している値をグループ化する

2021年3月18日木曜日

C#

t f B! P L

C#で下のように、配列から連続している値をグループ化する処理のサンプルコードです。

【入力データ】
[1, 1, 2, 2, 1, 1, 3, 3, 1]
【出力データ】
[1, 2, 1, 3, 1]

スポンサーリンク

サンプルコード(ごりごり組む)

率直にFor文などを駆使してやる方法です。なんかゴチャゴチャして見にくいですね。

int prev = source[0];
int[] groupAary = new int[0];

for (int i = 1; i < source.Length; i++) {
  if (prev != source[i]) {
    Array.Resize (ref groupAary, groupAary.Length + 1);
    groupAary[groupAary.Length - 1] = prev;
    prev = source[i];
  }
}

Array.Resize (ref groupAary, groupAary.Length + 1);
groupAary[groupAary.Length - 1] = prev;

サンプルコード(Linqを使ってみる)

Linqを使うと1行で書けます。

var result = source.Where ((element, index) => index == 0 || element != source[index - 1]);

EOF

センサから大量のデータを取得する時に、連続したデータを取り除いて、どのように値が変化するのかを見る時に作ったコードです。
需要はないかも。。。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ