【问题标题】:Merge Lists and "merge" sorting合并列表和“合并”排序
【发布时间】: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


【解决方案1】:

创建列表中每个元素的顺序图。 (所以对于 ACDEFGHJ、ABDFGHIJ、ABCDEGIJ,你会得到 A->C、A->B、C->D、B->D、B->C 等。)希望只有一个节点没有内向弧(在这种情况A);将此元素添加到您的结果列表中。移除该节点及其向外的弧线,然后重复该过程。如果您有多个没有向内弧的节点,那么您可以随机选择一个。如果你没有没有向内弧的节点,那么你就有一个循环。您可以通过随机选择一个成员来打破循环,但您必须先找到循环...

【讨论】:

  • 这听起来不错,但我想不通,谢谢。我最终重新设计了这个以维护一个单独的正确排序顺序列表,并使用它来对我的规范进行排序。
【解决方案2】:

看看 LINQ Concat 和 Distinct 扩展方法。他们应该能够帮助您完成您所追求的目标。

【讨论】:

  • 谢谢,我试过了,但他们正在添加新列表底部的“额外”项目。无论如何,我想出了一个不同的解决方案,使用一个单独的静态列表,其中包含所有规范并维护它们的排序顺序,并使用它来按联合列表排序。
猜你喜欢
  • 2014-12-02
  • 2015-12-17
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2011-05-17
  • 2015-05-12
相关资源
最近更新 更多