35


4

LINQ-IEnumerableで2番目の項目を選択

私は持っています

string [] pkgratio =" 1:2:6 ".Split( ':');

var items = pkgratio.OrderByDescending(x => x);

中間の値を選択して、これを思いつきました。 これはIEnumberableの2番目の値を選択する正しい方法ですか?

pkgratio.Skip(1).Take(1).First();

5 Answer


72


動作するものの、最も簡単な方法は、配列のインデックスを使用して、2番目の項目を参照することです(最初の要素のインデックスはゼロから始まるため、インデックス1で): pkgratio [1]

Console.WriteLine(pkgratio[1]);

より完全な例:

string[] pkgratio = "1:2:6".Split(':');

for (int i = 0; i < pkgratio.Length; i++)
    Console.WriteLine(pkgratio[i]);

「IEnumerable」を使用すると、動作するか、http://msdn.microsoft.com/en-us/library/bb299233%28v=vs.110%29.aspx [`ElementAt`を使用して要素を直接取得できます。方法]:

// same idea, zero index applies here too
var elem = result.ElementAt(1);

「IEnumerable」としてのサンプルを次に示します。 AsEnumerable()`呼び出しは、サンプルの動作を `IEnumerable`に対して強調することに注意してください。 実際には、 `Split`の string [] 配列結果に対して ElementAt`を使用できますが、前に示したインデクサーを使用する方が効率的です。

var pkgratio = "1:2:6".Split(':').AsEnumerable();
Console.WriteLine(pkgratio.ElementAt(1));


30


`.Take(1)`は必要ないと思います。

pkgratio.Skip(1).First()


18


シナリオ用の pkgratio.ElementAt(1);

ただし、メソッドは、「IQueryable」を実装したデータを使用していた場合、または特定のインデックスで始まるアイテムの範囲を取得する必要がある場合にのみ適用できます。

pkgratio.Skip(5).Take(10);


12


さて、 `First()`だけを実行する場合、 `Take(1)`は厳密には必要ないので、

pkgratio.Skip(1).First();

ただし、値がない場合はその `First()`が例外をスローするため、 `FirstOrDefault()`を試してからnullをチェックすることをお勧めします。


5


ただし、この場合は配列があるため、次の項目を使用して2番目の項目を非常に喜んで取得できます。

pkgratio[1]