web-dev-qa-db-fra.com

LINQ - sélection du deuxième élément dans IEnumerable

J'ai

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

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

Je veux sélectionner la valeur moyenne et j'ai trouvé cela. Est-ce une manière correcte de sélectionner la deuxième valeur dans un IEnumberable?

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

Alors que ce que vous avez fonctionne, la façon la plus simple serait d'utiliser l'index du tableau et de référencer le deuxième élément (à l'index 1 puisque l'index commence à zéro pour le premier élément): pkgratio[1]

Console.WriteLine(pkgratio[1]);

Un exemple plus complet:

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

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

Avec un IEnumerable<T> Ce que vous avez fonctionne, ou vous pouvez obtenir directement l'élément en utilisant la méthode ElementAt :

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

Voici votre échantillon sous forme de IEnumerable<string>. Notez que l'appel AsEnumerable() est pour souligner que l'exemple fonctionne avec un IEnumerable<string>. Vous pouvez réellement utiliser ElementAt contre le résultat du tableau string[] De Split, mais il est plus efficace d'utiliser l'indexeur indiqué précédemment.

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

Je ne pense pas que vous ayez besoin de .Take(1).

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

pkgratio.ElementAt(1); pour votre scénario.

Cependant, votre méthode n'est applicable que si vous utilisiez des données qui implémentaient IQueryable ou si vous deviez prendre une plage d'éléments commençant par un index spécifique, par exemple:

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

19
BeRecursive

Eh bien, la Take(1) n'est pas strictement nécessaire si vous allez juste First(), donc je pourrais aller avec

pkgratio.Skip(1).First();

Cependant, cette First() lèvera une exception s'il n'y a pas de valeur, vous voudrez peut-être essayer FirstOrDefault() puis vérifier la valeur null.

12
Jason Punyon

Mais dans ce cas, vous avez un tableau, vous pouvez donc très facilement obtenir le deuxième élément en utilisant:

pkgratio[1]
5
Andrew Barrett