wake-up-neo.com

LINQ - Auswählen des zweiten Elements in IEnumerable

Ich habe

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

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

Ich möchte den mittleren Wert auswählen und habe mir das ausgedacht. Ist dies ein korrekter Weg, um den zweiten Wert in einem IEnumberable auszuwählen?

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

Während Sie arbeiten, ist es am einfachsten, den Index des Arrays zu verwenden und auf das zweite Element zu verweisen (bei Index 1, da der Index für das erste Element bei Null beginnt): pkgratio[1]

Console.WriteLine(pkgratio[1]);

Ein vollständigeres Beispiel:

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

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

Mit einem IEnumerable<T> Funktioniert das, was Sie haben, oder Sie können das Element direkt mit der ElementAt -Methode abrufen:

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

Hier ist Ihr Beispiel als IEnumerable<string>. Beachten Sie, dass mit dem AsEnumerable() -Aufruf hervorgehoben werden soll, dass das Beispiel gegen einen IEnumerable<string> Arbeitet. Sie können ElementAt tatsächlich für das Array-Ergebnis string[] Aus Split verwenden, aber es ist effizienter, den zuvor gezeigten Indexer zu verwenden.

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

Ich glaube nicht, dass Sie .Take(1) brauchen.

pkgratio.Skip(1).First()
31
Cheng Chen

pkgratio.ElementAt(1); für Ihr Szenario.

Ihre Methode ist jedoch nur anwendbar, wenn Sie einige Daten verwendet haben, die IQueryable implementiert haben, oder wenn Sie eine Reihe von Elementen ab einem bestimmten Index verwenden müssen, z.

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

19
BeRecursive

Nun, die Take(1) ist nicht unbedingt notwendig, wenn Sie nur First() wollen, also könnte ich mitmachen

pkgratio.Skip(1).First();

Dieses First() löst jedoch eine Ausnahme aus, wenn es keinen Wert gibt. Daher möchten Sie möglicherweise FirstOrDefault() ausprobieren und dann auf null prüfen.

12
Jason Punyon

In diesem Fall haben Sie jedoch ein Array, sodass Sie das zweite Element ziemlich glücklich erhalten können, indem Sie Folgendes verwenden:

pkgratio[1]
5
Andrew Barrett