簡體   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