如何在c#中使用LINQ获得数组中的前10个奇数?



我需要一个查询来找出在c#中使用LINQ的数组中排名前10位的奇数。

我尝试了下面的代码。它工作,但我需要一个单一的LINQ查询找到前10条记录。
int[] Arr1 = { 2, 3, 4, 5, 6, 10, 1, 12, 11, 34, 221, 33, 13, 55,
123, 44, 222, 232, 45, 656, 67, 56, 445, 456 };
var result = from y in Arr1 where y%2 == 1 select y;
int c = 1;
foreach (var item in result)
{
if (c <= 10)
{
Console.WriteLine(item);
c++;
}
}

从技术上讲,您已经在var result = from y in Arr1 where y%2 == 1 select y;中有一个LINQ查询…可以写成

var result = (from y in Arr1 where y % 2 == 1 select y).Take(10);

但是我个人发现LINQ的风格很难阅读和维护(而且不够灵活,因为在这种情况下,我们最终不得不使用"方法")。风格)。

所以我会用Where来编码你的条件。

var result = Arr1.Where(n => n % 2 == 1);

然后只取符合条件的前10个元素

var result = Arr1.Where(...).Take(10);

那么你的foreach循环不需要计数器变量作为结果是一个可枚举的10或更少的元素在它。

你可以得到所有的奇数,然后按顺序排列列表,这意味着最大的将在列表的顶部,然后从列表中取出前十个元素,代码如下:

int[] Arr1 = { 2, 3, 4, 5, 6, 10, 1, 12, 11, 34, 221, 33, 13, 55, 
123, 44, 222, 232, 45, 656, 67, 56, 445, 456 };
// Get the odd numbers
var largestOddNumbers = Arr1.Where(n => n % 2 != 0)
// Sort from the largest to the smallest
.OrderByDescending(n => n)
.Take(10); // Take only the first ten elements

相关内容

  • 没有找到相关文章

最新更新