【问题标题】:Sorting list according to another list [duplicate]根据另一个列表对列表进行排序[重复]
【发布时间】:2020-02-06 08:51:13
【问题描述】:

我有一个List<XYZ>,我们就叫它oListXYZ

{{3,2,1},{6,5,4},{9,8,7}}

还有List<double>我们会打电话给oListD

{9,2,5}

这两个列表是相关的,即oListD[i]corresponds tooListXYZ[i]。我需要将oListXYZ中的XYZ值按照它们对应的doubleoListD中的值排序,像这样:

{2,5,9} {{6,5,4},{9,8,7},{3,2,1}}

使用oListD.Sort给出所需的顺序,但我需要一种方法来排序oListXYZ按照所述顺序。

我已尝试使用 LINQ 或 here 描述的解决方案,但尚未找到所需的结果。

【问题讨论】:

  • 我不明白这个问题@_@。
  • 它们的“对应双倍值”是什么?我认为您在这里提供的信息不足以让我们提供帮助
  • 你能发布一些测试用例(即输入/输出列表)吗?

标签: c# list sorting


【解决方案1】:

使用Enumerable.Zip 组合它们,然后使用OrderBy 订购

对两个对应的元素应用一个指定的函数 序列,产生一系列结果。

var list = new List<(int, int, int)>(){(3, 2, 1),(6, 5, 4),(9, 8, 7)};

var doubles = new List<double>(){9,2,5};

var results = list.Zip(doubles, (tuple, d) => (t: tuple, d: d))
                  .OrderBy(x => x.d)
                  .Select(x => x.t);

foreach (var result in results)
   Console.WriteLine(result);

输出

(6, 5, 4)
(9, 8, 7)
(3, 2, 1)

【讨论】:

  • 你的答案非常棒——它比重复问题中的答案要好——我建议你也去那里发布你的答案(稍微调整一下)。
  • 正是我正在寻找的那种解决方案。简单明了。谢谢。
猜你喜欢
  • 2013-09-17
  • 2013-09-12
  • 1970-01-01
  • 2018-01-03
  • 2018-09-15
  • 2018-11-15
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多