2017-11-28 4 views
-7

私は[1、2、3、4、5]を持っています。どのように3から5まで降順で要素をソートできますか?期待される:[1,2,5,4,3]C#は降順で要素の範囲を並べ替えます

+3

ここで質問を送信する前に、質問のタイトルをGoogleに貼り付けるようにしてください。 –

+0

となりますので、問題に関連する既存コードのサンプルを投稿してください。これは非常に悪い/低いレベルの質問です。編集して、このダウンタイムをすべて持っている間に質問する方法をお読みください – MethodMan

+1

おそらく? –

答えて

1

を把握すれば、あなたはReverseを呼び出した後、リストの残りの部分とすることをConcat、その後、最初の2つの項目をTakeすることができます見てみましょう:

var items = new[] {1, 2, 3, 4, 5}; 
var sorted = items.Take(2).Concat(items.Skip(2).Reverse()); 

更新:このロジックを使用して、より一般的な実装を作成することができます。

private static int[] SortRangeReverse(int[] input, int startRange, int endRange) 
{ 
    // Argument validation - decide what you want to do if the args aren't what you expect 
    if (input == null || input.Length < 2) return input; 
    if (endRange <= startRange) return input; 
    if (startRange < 0) startRange = 0; 

    // The actual "meat" of the original answer in a more generic form: 
    return 
     input.Take(startRange) 
      .Concat(input.Skip(startRange).Take(endRange + 1 - startRange).Reverse() 
      .Concat(input.Skip(endRange + 1))) 
      .ToArray(); 
} 
+3

答えをハードにコーディングして、他の入力値ではうまくいかないソリューションを書く場合は、 'var sorted = new [] {1、2、5,4,3 };そしてそれで済む。 – Servy

+0

@謝さんああ、それはよかっただろう! ;) –

+0

@Pervyは、OPから提供される擬似データだけで何か他のものを思いつくのは不可能です。実際には固定2よりも重要なことはありませんか、よりダイナミックなアプローチを提供できますか? –

0

最後にいくつかの要素についてreverseを呼び出します。

0

オブジェクトを大きくするまで2
最後のオブジェクトでオブジェクトを反転します。
あなたがSystem.Linqを使用して、残り

関連する問題