我有两个名为权重和值的数组。我想根据权重的排序对值进行排序。通过这样做,效果非常好
Array.Sort(Weights,Values);
Run Code Online (Sandbox Code Playgroud)
这给了我按升序排序的数组。我想按降序进行相同的排序。有没有更好的方法不使用
Array.Reverse(Weights) and Array.Reverse(Values)
您必须使用此重载并提供自定义IComparer<T>. 相对较新的Comparer<T>.Create方法使这变得更加容易,因为您可以简单地将委托或 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)));
Run Code Online (Sandbox Code Playgroud)
为了好玩,这里有一个使用 LINQ 的解决方案:
var pairs = Weights.Zip(Values, Tuple.Create);
var orderedPairs = pairs.OrderByDescending(x => x.Item1);
Run Code Online (Sandbox Code Playgroud)
我还建议您考虑使用一个类将权重和值存储在一起,而不是作为两个单独的数组。