2012-01-11 12 views
-1

私はsctructsのリストを持っています。 structにはフィールドxがあります。私は、構造体のものを選択したいと思います。これらの構造体は、パラメータxで互いにかなり接近しています。言い換えれば、xでそれらをクラスター化したいと思います。 私は、1行の解決策があるはずだと思います。 ありがとうございます。 GroupBy拡張メソッドで構造体のリストから選択してください

+0

{A、B}、{B、C}、{C、D}がすべて閉じている場合、AとDがともにクラスタリングされているグラフの意味でクラスタリングされますか?特に近い?または、クラスタのすべてのメンバーが互いに接近している必要がありますか? –

+0

最初のオプション。 – Kamerer

+0

"クラスタリング"していません。それは「グループ化」と呼ばれています。 SQLの場合: 'GROUP BY'。 –

答えて

2

ルック:

var items = mylist.GroupBy(c => c.X); 

This articlegroup byを用いた例の多くを提供します。

+0

これはクラスタ化せず、等価のXでグループ化します。 – flq

+0

Xでグループ化し、IGグループ化を繰り返し、互いに十分に「近い」コレクションをマージします。 –

4

私はあなたが欲しいものを正確に理解している場合、あなたは、グラフスタイルのクラスタリングをやっている場合は、構造体のフィールドX.

+0

ええ、私はそれらを並べ替えることができますし、それらの間の違いをペアワイズで比較することができますが、私は、標準機能 – Kamerer

0

であなたのリストをソートする必要があるかもしれません、それを行うための最も簡単な方法は、構築することです最初は空のクラスターのリスト。次に、入力をループし、各値に対して、現在の値に近い要素を少なくとも1つ持つすべてのクラスターを見つけます。それらのすべてのクラスタは、値と一緒にマージする必要があります。何もない場合、値はクラスタ全体に入ります。

整数の単純なリストで行う方法のサンプルコードです。

関連する問題