struct simpleItem
{
String Category1;
String Category2;
...
String CategoryN;
}
每个项目都有一系列属于某些类别的值。在处理列表时,类别N的数量是已知的,并且每个项目具有相同数量的类别和每个类别只有一个值,不会出现重复项。但是,每个列表可以具有不同的类别集。
我正在寻找一种按类别分组这些项目的方法,以便如果这些分组被解构为通过组合每个类别的排列而变成单个项目,则最终将得到原始的组合,没有重复项。
组结果将是:
struct grouped
{
String[] Category1;
String[] Category2;
...
String[] CategoryN;
}
示例
为了方便起见,我们将限制为3个类别,但可以有N个。
类别
动物、眼睛颜色、毛发"动物"类别的选择:猫、狗、老鼠、马
"眼睛颜色"类别的选择:蓝色、黄色、绿色、红色、橙色
"毛发"类别的选择:长、短、卷曲
如果该列表包含这3个类别的所有排列组合,则最终结果将是
第一组:
动物 [猫、狗、老鼠、马]
眼睛颜色 [蓝色、黄色、绿色、红色、橙色]
毛发 [长、短、卷曲]
如果我有一个子列表,例如:
- 猫、蓝色、长
- 猫、蓝色、短
- 狗、蓝色、长
- 狗、蓝色、短
- 狗、绿色、长
- 老鼠、红色、短
- 老鼠、蓝色、短
让我们称这个列表为输入(A)
将这些项目分组后,我们可能会得到以下结果:(还可能有其他可能性)。 分组标准是尽可能少地输出组。
第一组:
动物 [猫、狗]
眼睛颜色 [蓝色 ]
毛发 [长、短]
第二组:
动物 [狗]
眼睛颜色 [绿色 ]
毛发 [长]
第三组:
动物 [老鼠 ]
眼睛颜色 [红色、蓝色]
毛发 [短 ]
让我们称这些组为输出(B)
正如我们所看到的,通过将每个结果组的项目组合起来,我们将回到原始输入列表中的7个元素(A)。
问题
因此,我正在尝试编写生成这些组的算法。我正在尝试使用LINQ来实现,但我也愿意听取其他建议。 有没有关于如何从(A)到(B)的任何建议?