如何使用LINQ对奇数和偶数进行分组?

本文关键字:何使用 LINQ | 更新日期: 2023-09-27 18:10:15

我想使用LINQ将我的奇数和偶数分组在两个单独的数组中。

 int[] randNum = randomNums(20, 1000, 1000);
 var oddEvnNums = from num in randNum
                  group ???
                  select new { odd = oddNums[], even = evnNums[]}

 int oddNum = oddEvnNums.odd[0];
 int evenNum = oddEvnNums.even[0];

如何使用LINQ对奇数和偶数进行分组?

创建一个键为num & 1的查找(对于正数相当于num % 2,但对于负数坚持使用1而不是-1):

var lookup = randNum.ToLookup(num => num & 1);
var even = grouped[0].ToArray();
var odd = grouped[1].ToArray();

请注意,如果您请求一个没有任何条目的键,则查找将返回一个空序列,因此您无需担心是否有奇数和偶数。

或者,不分组,您可以只遍历整个序列两次:

var even = randNum.Where(num => (num & 1) == 0).ToArray();
var odd = randNum.Where(num => (num & 1) == 1).ToArray();

只有在序列两次都相同的情况下才有效(而不是每次迭代时随机生成,例如),但它可能比分组方法更有效。

仅按模分组

from num in randNum
group num by (num % 2) == 0