C# array.sort() 按降序排列多个数组

标签 c# arrays sorting

我有两个名为权重和值的数组。我想根据权重的排序对值进行排序。这样做非常好

Array.Sort(Weights,Values);

这为我提供了按升序排序的数组。我想按降序进行相同的排序。有没有更好的方法不使用 Array.Reverse(Weights) 和 Array.Reverse(Values)

最佳答案

你必须使用 this overload并提供自定义 IComparer<T> .比较新 Comparer<T>.Create 方法使这变得容易得多,因为您可以简单地将委托(delegate)或 lambda 表达式转换为 IComparer<T>。无需自己编写完整的实现代码。从问题中不清楚 Weights 的数据类型是什么和 Values是,但这里有一个使用 double[] 的例子和 int[]分别是:

var Weights = new [] { 1.7, 2.4, 9.1, 2.1, };
var Values = new [] { 7, 9, 5, 3, };

Array.Sort(Weights, Values, Comparer<double>.Create((x, y) => y.CompareTo(x)));

为了好玩,下面是一个使用 LINQ 的解决方案:

var pairs = Weights.Zip(Values, Tuple.Create);
var orderedPairs = pairs.OrderByDescending(x => x.Item1);

我还建议您考虑使用类将权重和值存储在一起,而不是作为两个单独的数组。

关于C# array.sort() 按降序排列多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37095137/

相关文章:

c# - 将对象转换为非显式实现的接口(interface)

c# - NuGet 发布管理

c - 使用链表在C中进行插入排序

c# - 如何将外键映射到 SQLite-Net Extensions 中的对象字段?

c# - 如何从基于 Windows 窗体的应用程序中的控制台应用程序访问变量?

java - 在java中使用数字的金字塔程序并以相反的顺序打印

c - 在 C 中生成排序数组的 n 路交集的高效算法

c++ - 旋转 QByteArray

algorithm - 插入时排序数组还是使用堆更快

php - 对表中 4 列的数组进行排序,以便按每列的字母顺序读取