名前付きオブジェクトのリストがあります:
class NamedObject {
public string name;
public int value;
public NamedObject(string name, int value) {
this.name = name;
this.value = value;
}
}
...
public static bool HasRelationship(NamedObject a, NamedObject b) {
return a.value == b.value;
}
...
var objs = new List<NamedObject>();
objs.Add(new NamedObject("D", 1));
objs.Add(new NamedObject("Z", 2));
objs.Add(new NamedObject("Y", 3));
objs.Add(new NamedObject("A", 2));
objs.Add(new NamedObject("C", 1));
objs.Add(new NamedObject("Z", 1));
名前で並べ替えてから、ブール関係でサブソートしたいと思います。この例では、ブール関係はa.value == b.value
です。
出力リスト:
- あ (2)
- ズ (2)
- し (1)
- D (1)
- ズ (1)
- や (3)
したがって、名前で並べ替え、ブール関係でグループ化し、サブグループを名前で並べ替えます。
編集:
上記は実際の並べ替えを簡略化したものです。私のアプリケーションでは、このHasRelationship
関数は 2 つの方向が対称かどうかを判断します。方向には、エディター インターフェイス内で論理的な順序で表示されるように名前が付けられています。
これが視覚化です: