我想使用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];
答案 0 :(得分:10)
只需使用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();
仅当序列两次都相同(而不是每次迭代时随机生成)时才有效,但它可能比分组方法更有效。
答案 1 :(得分:-1)
只按模数分组
from num in randNum
group num by (num % 2) == 0