Подтвердить что ты не робот

LINQ - выбор второго элемента в IEnumerable

У меня

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

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

Я хочу выбрать среднее значение и придумать это. Правильно ли это выбрать второе значение в IEnumberable?

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

Ответ 1

В то время как у вас есть работы, самым простым способом было бы использовать индекс массива и ссылаться на второй элемент (по индексу 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<T> того, что у вас есть, или вы можете напрямую получить элемент с помощью метода ElementAt:

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

Вот ваш образец как IEnumerable<string>. Обратите внимание, что вызов AsEnumerable() заключается в том, чтобы подчеркнуть, что образец работает против IEnumerable<string>. Фактически вы можете использовать ElementAt для результата массива string[] из Split, но более эффективно использовать показанный ранее индекс.

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

Ответ 2

Я не думаю, что вам нужно .Take(1).

pkgratio.Skip(1).First()

Ответ 3

pkgratio.ElementAt(1); для вашего сценария.

Однако ваш метод применим только в том случае, если вы использовали некоторые данные, которые внедрили IQueryable, или вам нужно было взять ряд элементов, начиная с определенного индекса, например:

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

Ответ 4

Ну, Take(1) не является строго необходимым, если вы собираетесь просто First(), поэтому я могу пойти с

pkgratio.Skip(1).First();

Однако, First() генерирует исключение, если нет значения, поэтому вы можете попробовать FirstOrDefault(), а затем проверить значение null.

Ответ 5

Но в этом случае у вас есть массив, так что вы можете довольно счастливо получить второй элемент, используя:

pkgratio[1]