如何使用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];
创建一个键为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