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

时间:2016-05-08 00:54:03

标签: c# arrays sorting

我有两个名为权重和值的数组。我想根据权重的排序对值进行排序。这样做完全没问题

Array.Sort(Weights,Values);

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

2 个答案:

答案 0 :(得分:4)

您必须使用this overload并提供自定义IComparer<T>。相对较新的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);

我还建议你考虑使用一个类来存储权重和值,而不是两个单独的数组。

答案 1 :(得分:1)

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

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();

但你也可以尝试其中一个答案:
Better way to sort array in descending order