2016-05-08 9 views
2

I重みと値という2つの配列があります。私は重みの並べ替えに基づいて値を並べ替えたいそれは完全に正常に動作します。複数配列の降順のC#array.sort()

Array.Sort(Weights,Values); 

これは私に昇順でソートされた配列を与えます。私は降順で同じソートをしたかったのです。 Array.Reverse(Weights) and Array.Reverse(Values)

+0

「重み」と「値」はどれくらいですか? – Enigmativity

+0

カスタムコンパレータを作成します。 – Tdorno

答えて

4

あなたはthis overloadを使用して提供する必要がありますカスタム。IComparer<T>。比較的新しいComparer<T>.Createメソッドを使用すると、デリゲートまたはラムダ式を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); 

2つの別々の配列としてではなく、クラスを使用して重みと値を一緒に格納することをお勧めします。

+0

あなたの答えよりも。重みはint配列で、値はdouble配列です。どのように私は上記のコードを使用してそのシナリオを処理できますか?あなたは例を挙げることができますか? – Srini

+1

@スレイニ「Comparer 」を「Comparer 」に変更するだけです。 –

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

関連する問題