CodeGo.net> LINQ-在IEnumerable中选择第二项

我有

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

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

我想选择中间值,并提出了这个建议。 这是在IEnumberable中选择第二个值的正确方法吗?

pkgratio.Skip(1).Take(1).First();
Jon asked 2020-08-05T09:25:52Z
5个解决方案
76 votes

尽管您的工作正常,但最直接的方法是使用数组的索引并引用第二项(在索引1处,因为第一个元素的索引从零开始):IEnumerable<string>

Console.WriteLine(pkgratio[1]);

一个更完整的示例:

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

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

使用IEnumerable<string>,您可以运行,也可以使用IEnumerable<string>方法直接获取元素:

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

这是您作为IEnumerable<string>的示例。请注意AsEnumerable()的调用是为了强调针对IEnumerable<string>的示例。您实际上可以对string[]string[]数组结果使用ElementAt,但使用前面显示的索引器效率更高。

var pkgratio = "1:2:6".Split(':').AsEnumerable();
Console.WriteLine(pkgratio.ElementAt(1));
Ahmad Mageed answered 2020-08-05T09:26:26Z
32 votes

我认为您不需要.Take(1)

pkgratio.Skip(1).First()
Cheng Chen answered 2020-08-05T09:26:46Z
19 votes

pkgratio.Skip(5).Take(10);适用于您的方案。

但是,该方法仅在使用某些已实现pkgratio.Skip(5).Take(10);的数据或需要从特定索引开始的一系列项目时才适用,例如:

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

BeRecursive answered 2020-08-05T09:27:11Z
12 votes

好吧,如果您只想使用FirstOrDefault()617,则First()并不是绝对必要的,所以我可能会同意

pkgratio.Skip(1).First();

但是,如果没有值,则First()将引发异常,因此您可能要尝试FirstOrDefault(),然后检查是否为空。

Jason Punyon answered 2020-08-05T09:27:35Z
5 votes

但是在这种情况下,您有一个数组,因此您可以很高兴地使用以下方法获得第二项:

pkgratio[1]
Andrew Barrett answered 2020-08-05T09:27:55Z
translate from https://stackoverflow.com:/questions/3701135/linq-selecting-second-item-in-ienumerable