我有两个名为权重和值的数组。我想根据权重的排序对值进行排序。这样做非常好
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/