10

C# 4.0。ラムダ式を使用して次のことを行うにはどうすればよいですか?

int[] a = new int[8] { 0, 1, 2, 3, 4, 5, 6, 7 };
// Now fetch every second element so that we get { 0, 2, 4, 6 }
4

3 に答える 3

27
int[] list = a.Where((value, index) => index % 2 == 0)
              .ToArray();

%(mod) operatorによって計算されるように、偶数のインデックスのみが選択されます。

5 % 2 // returns 1
4 % 2 // returns 0

MSDNによると:

% 演算子

于 2012-10-26T07:52:54.897 に答える
10

を使用した別のアプローチEnumerable.Range

var result = Enumerable.Range(0, a.Length/2)
                       .Select(i => a[2*i])
                       .ToArray();

または、より効率的にチェックするためにビット単位を使用します。

var result = a.Where((i, index) => (index & 1) == 0)
              .ToArray();
于 2012-10-26T07:57:32.273 に答える
8

残りの演算子はあなたの友達です。

int[] everySecond = a.Where((i, ind) => ind % 2 == 0).ToArray();

%演算子(C#リファレンス)

%演算子は、最初のオペランドを2番目のオペランドで除算した後の余りを計算します。すべての数値タイプには、事前定義された剰余演算子があります。

E.リッパート:違いは何ですか?剰余とモジュラス

于 2012-10-26T07:54:53.900 に答える