LINQ - 在IEnumerable中选择第二项

时间:2010-09-13 14:01:25

标签: c# linq .net-3.5 c#-3.0

我有

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

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

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

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

5 个答案:

答案 0 :(得分:74)

虽然你有什么工作,但最直接的方法是使用数组的索引并引用第二个项目(索引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 method直接获取元素:

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

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

Split

答案 1 :(得分:30)

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

pkgratio.Skip(1).First()

答案 2 :(得分:19)

pkgratio.ElementAt(1);适用于您的方案。

但是,只有在使用某些实现IQueryable的数据或者需要从特定索引处开始的一系列项目时,您的方法才适用,例如:

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

答案 3 :(得分:12)

嗯,Take(1)并非绝对必要,如果你只是First(),那么我可能会选择

pkgratio.Skip(1).First();

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

答案 4 :(得分:5)

但是在这种情况下你有一个数组,所以你可以很高兴地使用第二项:

pkgratio[1]