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

2019年7月1日月曜日

C#

t f B! P L

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

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

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

スポンサーリンク

QooQ