【发布时间】:2012-01-18 20:34:40
【问题描述】:
我有一个列表列表,我试图弄清楚如何将它们合并到一个 unqiue 列表中,但我还想考虑当前每个列表的排序。
例如:
List<List<string>> ListofLists = new List<List<string>>();
ListofLists.Add(new List<string>() { "Color", "Size", "Dimensions" });
ListofLists.Add(new List<string>() { "Color", "Size", "Dimensions" });
ListofLists.Add(new List<string>() { "Color", "Size", "Weight", "Dimensions" });
我希望“合并”列表的内容是:
颜色、尺寸、重量、尺寸
我查看了 Unions,但这会将“权重”添加到列表的末尾——我希望它“合并”列表,保持“额外”值内联(尽可能)。
我还发现this thread 很接近,但它似乎在随机点插入了“额外”值。
对不起,如果没有很好地解释,我真的不知道如何描述。
编辑:这样做的目的是将多个产品放在一个表格上,并在下面列出它们的规格,在同一行显示相似的规格。有些产品可能有不同的规格,但在大多数情况下它们是相同的。
所以我正在尝试生成一个可能的 Spec 名称列表以显示在第一列中。通常,最后的规格与保修有关,顶部与型号等有关。因此,如果产品 3 有一些奇怪的规格,我宁愿将它内嵌插入某处,而不是在保修期内粘贴在末尾。
示例输出:
Model # | 123 | 456 | 789
Color | red | red | blue
Size | big | big | small
Weight | | | 3
Dimensions | 1" | 1" | 1"x1"x1"
Warranty | 1 | 2 | 3
可能不是最好的例子,但例如 123 和 456 可能没有重量规格。因此,与其在底部添加权重(当我进行联合时会发生这种情况),我希望它尽可能接近原始列表的“内联”。在此示例中您看不到,但每个产品可能有 30 个规格,因此最好将重要的规格放在最前面,因为它们的规格列表反映了这一点。
【问题讨论】:
-
是否可以看到一些理想的输入输出值?
-
如果第 4 个列表包含“尺寸”、“价格”、“重量”、“数量”怎么办?我知道这是任意的,但如果不考虑所有情况,真的很难想出任何类型的算法。
-
这很重要。如果您浏览每个列表并具有颜色、大小、尺寸/重量,那么算法如何决定下一个应该是重量还是尺寸(除了操作数的顺序,这就是 Union() 所做的)跨度>
-
@Marc 我想过,但我想我正在寻找任何选择。我想既然所有的值都在第一个列表中,它会坚持第一个的顺序。
-
@TomF:如果你想先坚持第一个列表的顺序,那么
Union()就是你想要的......它保持第一个列表的顺序并从第二...
标签: c# arrays list sorting ienumerable