繁体   English   中英

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

[英]C# array.sort() for multiple arrays in Descending order

我有两个名为权重和值的数组。 我想根据权重排序对值进行排序。 通过这样做,效果很好

Array.Sort(Weights,Values);

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

您将必须使用此重载并提供一个自定义IComparer<T> 相对较新的Comparer<T>.Create方法使此操作变得容易Comparer<T>.Create因为您可以简单地将委托或lambda表达式转换为IComparer<T>而不必自己编写完整的实现。 从这个问题尚不清楚, WeightsValues的数据类型是什么,但这是分别使用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);

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

首先,创建一个包含相应项目的结构。

var items =
    Weights
        .Select((weight, index) =>
            new
            {
                Weight = weight,
                Value = Values[index]
            }
        )
        .OrderByDescending(item => item.Weight)
        .ToArray();

然后,您可以返回排序后的数组:

Weights = items.Select(item => item.Weight).ToArray();
Values = items.Select(item => item.Value).ToArray();

但是您也可以在这里尝试答案之一:
更好的方法以降序对数组进行排序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM