合并列表和“合并”排序
本文关键字:合并 排序 列表 | 更新日期: 2023-09-27 18:17:32
我有一个列表的列表,我试图弄清楚如何将它们合并成一个独特的列表,除了我还想考虑到当前每个列表的排序。
,
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" });
我希望"合并"列表的内容为:
颜色,尺寸,重量,尺寸
我已经看过联合,但这增加了"权重"到列表的末尾——我希望它"合并"列表,保持"额外"值内联(尽可能多)。
我也发现这个线程是接近的,但它似乎在一个随机点插入"额外"的值。
对不起,如果这没有解释清楚,我真的不知道如何描述。
Edit:这样做的目的是将多个产品放在一个表中,并在下面列出它们的规格,在同一行显示相似的规格。有些产品可能有不同的规格,但大多数都是相同的。
因此,我试图生成一个可能的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个规格,所以最好把重要的放在最上面,因为它们的规格列表反映了。
创建列表中每个元素的排序图。(所以对于ACDEFGHJ, ABDFGHIJ, ABCDEGIJ,你会得到A->C, A->B, C->D, B->D, B->C,等等)希望只有一个节点没有向内弧线(在这种情况下是A);将此元素添加到生成的列表中。移除该节点及其向外的弧线,并重复该过程。如果你有多个没有向内弧线的节点,那么你可以随机选择一个。如果没有节点,也没有向内的弧线,那就是一个循环。你可以通过随机选择一个成员来打破这个循环,但你必须先找到这个循环…
看看LINQ的Concat和Distinct扩展方法。他们应该能够帮助你完成你所追求的。