【问题标题】:How to sort a list with the values of another list with Linq如何使用 Linq 使用另一个列表的值对列表进行排序
【发布时间】:2020-11-21 19:39:25
【问题描述】:

我有一个参数列表:

List<double> parameters = new List<double>() { 3.56, 8.9, 1.7, 0.5, 4.69 };

还有一个通用对象列表:

List<object> objects= new List<object>() { objA, objB, objC, objD, objE };

如何根据“参数”列表的排序对“对象”列表进行相应的排序?

【问题讨论】:

  • 为什么不上课呢?我们怎么知道哪个objectdouble 搭配,反之亦然?目前这是没有意义的,如果objA 应该8.9 一起说,那么为什么这种关系不能以我们可以对列表进行排序的方式建立>?目前这个问题缺少详细信息供我们帮助您,请更新。
  • @Codexer 两个列表的长度相同。 First 与 first 配对,second 与 second 配对,等等……显然 (?)。
  • 你说,How can I sort "objects" accordingly with the values of "parameters" ?,我们在排序什么?如果我们对objects 进行排序,具体基于什么,那么我们如何知道它们在parameters 中的索引是多少? parameters 对象需要更改以匹配 objects 列表,不是吗?如果是这样,我们该怎么做?
  • 老实说,您还没有回答我的问题(我要求提供更多详细信息来帮助您),也没有更新您的帖子以包含您尝试过的代码和无效的代码.如前所述,请更新您的帖子以获得帮助。
  • @Codexer 我试图让我的帖子尽可能简单。我想不出为什么我的要求不是很明显。

标签: c# linq sorting


【解决方案1】:

虽然你接受了一个答案,但展示一个不是众所周知的方法仍然很有趣,但比任何方法都快而且单线。但是你必须从数组开始:

var parameters = new [] { 3.56, 8.9, 1.7, 0.5, 4.69 };
var objects = new [] { "objA", "objB", "objC", "objD", "objE" };

Array.Sort(parameters, objects);

现在objects按照parameters的排序顺序持久排序:

objD
objC
objA
objE
objB

【讨论】:

  • 这也很棒!我很绝望(搜索了几个小时),所以我立即接受了第一个可行的解决方案……感谢您的选择!也许我可以更改我的代码以使用数组...
  • 很好,我不知道你能做到这一点!
  • Array.Sort 是只排序“对象”数组还是“参数”数组?
  • parameters 也是。
  • 这是个问题。避免这种情况的方法?制作原始“参数”数组的备份副本?
【解决方案2】:

您可以使用 Linq 函数 OrderBy 以参数列表中的对象各自的索引作为键对对象进行排序。

List<double> parameters = new List<double>() { 3.56, 8.9, 1.7, 0.5, 4.69 };
List<object> objects = new List<object>() { objA, objB, objC, objD, objE };

objects = objects.OrderBy(x => parameters[objects.IndexOf(x)]).ToList();

【讨论】:

  • 我无法理解!它工作正常......但是......你能解释一下它是如何/为什么工作的吗? ...你的 c#-fu si 强大!
  • @maje90 对不起,我应该说得更清楚。我使用了接受 lambda 函数的函数 OrderBy。函数左侧的变量“x”表示列表中的每个项目,它在“对象”列表中找到该项目的索引。 “参数”列表中该索引处的项目在对列表进行排序时用作值。对不起,如果我没有多大意义 - lambda 和 Linq 有点令人困惑,但是当你掌握它的窍门时,它非常有用。
  • 我真的需要让 Linq 成为我的。我会认真研究你最后的评论。 XD ...再次感谢!
  • @Cosmoleon new List&lt;object() 无效,可能是 o 型?
  • @Codexer 糟糕,这是个错误
猜你喜欢
  • 2012-06-01
  • 2015-04-05
  • 2018-05-14
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
相关资源
最近更新 更多