現在のセット (同じグループ内のアイテム) の値と交差することなく、他のセット (グループのセット) 内のセット (アイテムのセット) の組み合わせを生成する良い (読みやすく、実行時間が速い) 方法は何ですか?
たとえば、2 つの単純なクラスがあります。アイテムのセットを含むグループ
public class Group
{
public string Name { get; set; }
public ISet<Item> Items { get; set; }
}
public class Item
{
public string Name { get; set; }
}
その結果、グループのセットがあり、それぞれに次のように構成されたアイテムのセットが含まれています。
var groupA = new Group
{
Name = "A",
Items = new HashSet<Item> {
new Item { Name = "A1" },
new Item { Name = "A2" },
new Item { Name = "A3" }
}
};
var groupB = new Group
{
Name = "B",
Items = new HashSet<Item> {
new Item { Name = "B1" },
new Item { Name = "B2" },
}
};
var groupC = new Group
{
Name = "C",
Items = new HashSet<Item> {
new Item { Name = "C1" },
new Item { Name = "C2" },
new Item { Name = "C3" },
new Item { Name = "C4" },
}
};
var groupsSet = new HashSet<Group>();
groupsSet.Add(groupA);
groupsSet.Add(groupB);
groupsSet.Add(groupC);
groupsSet
(1) と (2) のような組み合わせから得られる良い方法は次のとおりです。
1)
A1, B1, C1
A1, B1, C2
A1, B1, C3
A1, B1, C4
A1, B2, C1
A1, B2, C2
A1, B2, C3
A1, B2, C4
A2, B1, C1
A2, B1, C2
A2, B1, C3
A2, B1, C4
A2, B2, C1
A2, B2, C2
A2, B2, C3
A2, B2, C4
A3, B1, C1
A3, B1, C2
A3, B1, C3
A3, B1, C4
A3, B2, C1
A3, B2, C2
A3, B2, C3
A3, B2, C4
2)
A1
A2
A3
B1
B2
C1
C2
C3
C4
A1, B1
A1, B2
A2, B1
A2, B2
A3, B1
A3, B2
A1, C1
A1, C2
A1, C3
A1, C4
A2, C1
A2, C2
A2, C3
A2, C4
A3, C1
A3, C2
A3, C3
A3, C4
B1, C1
B1, C2
B1, C3
B1, C4
B2, C1
B2, C2
B2, C3
B2, C4
A1, B1, C1
A1, B1, C2
A1, B1, C3
A1, B1, C4
A1, B2, C1
A1, B2, C2
A1, B2, C3
A1, B2, C4
A2, B1, C1
A2, B1, C2
A2, B1, C3
A2, B1, C4
A2, B2, C1
A2, B2, C2
A2, B2, C3
A2, B2, C4
A3, B1, C1
A3, B1, C2
A3, B1, C3
A3, B1, C4
A3, B2, C1
A3, B2, C2
A3, B2, C3
A3, B2, C4
同じグループのアイテムが互いに交差せず、他のグループのアイテムのみと交差する場合は?
グループの数とグループ内のアイテムの数は異なる場合があります。
組み合わせ内のアイテムの順序は関係ありません。
ありがとうございました。