我有一个List列表,我正在试图弄清楚如何将它们合并到一个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个规格,因此最好将重要的产品放在顶部,因为它们的规格列表会反映出来。
答案 0 :(得分:2)
创建列表中每个元素排序的图表。 (因此对于ACDEFGHJ,ABDFGHIJ,ABCDEGIJ,你会得到A-> C,A-> B,C-> D,B-> D,B-> C等。)希望只有一个节点会有没有向内弧(在这种情况下是A);将此元素添加到结果列表中。删除该节点及其向外的弧,然后重复该过程。如果您有多个没有向内弧的节点,那么您可以随机选择一个。如果没有没有内弧的节点,那么你有一个循环。您可以通过随机选择一个成员来打破周期,但您必须首先找到该周期......
答案 1 :(得分:0)
查看LINQ Concat和Distinct扩展方法。他们应该能够帮助你完成你所追求的目标。