2009-04-28 13 views
0

元の配列の逆の代替要素を含む配列を取得する必要があります。より簡単な方法で結果を得る

たとえば、要素{12,56,67}を含む配列。

私はこれで行う必要があり

({67,56,12}は、代替要素手段{67,12}を取る取得する配列を逆転){67,12} を含む配列を取得する必要が

C#

+0

これはHWの質問ですか? –

+0

あなたは宿題を自分でやってはいけませんか? –

+0

私はなぜそのような代替手段が必要です。 – peter

答えて

2

あなたがC#3を使用している場合は、これを試してみてください。

int[] array = {1,2,3,4,5,6}; 
var x = array.Reverse().Where((n,i) => i % 2 !=0); 

はどこLINQと呼ばれる言語機能の一部を構成する拡張メソッド(C#の3.0の新機能)です。これは述語に基づいてシーケンスをフィルタリングします。上記のサンプルでは、​​nはシーケンスの要素であり、iはシーケンス内の要素のゼロベースのインデックスです。どちらも強く型付けされています。述語i%2!= 0は、要素のインデックスが2で直接割り切れないことを示しているので、リストを逆にして、そこから奇数要素を選択するということです。

最も効率的な解決策ではありませんが、短く簡潔です。

+0

ここで(n、i)=> i%2!= 0)、ここで何が起こっている、nと私はデータ型を宣言していない、そしてまた – peter

+0

これは正常に動作していますコードのオンラインで、あなたは私にすべての事を教えてください、私はすべてを勉強する必要があります、ここではVarのキーワードは、私はLINQクエリでこれらのものを見た – peter

+0

私は上記の答えに説明を追加しました、お役に立てれば。 –

4

これは最短の回答ではありませんが、かなり最適化されているようです。

int[] rgIn = new int[]{0,1,2,3,4,5}; 

int[] rgOut = new int[rgIn.Length/2]; 

int ixOut = 0; 
for (int ixIn = rgIn.Length - 2; ixIn >= 0; ixIn -= 2) 
{ 
    rgOut[ixOut++] = rgIn[ixIn]; 
} 
+0

これはうまく動作しますが、もう1つはさらに最適化されました – peter

+0

ベンチマークしましたか?最適化を定義;) – Alex