如何组合奇数甚至使用LINQ?

时间:2014-06-25 07:12:01

标签: c# linq

我想使用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];

2 个答案:

答案 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