如何通过哪里获得两个数组?

时间:2013-09-03 07:00:15

标签: c# linq

我有一组电子邮件。 我需要使用where表达式获取两个数组。

var firstArray = emailTo.Where(e => whiteList.Contains(e.Address));
var secondArray = emailTo.Where(e => !whiteList.Contains(e.Address));

怎么做?

P.S。在我写作的时候,我已经明白了如何做到这一点:

emailTo.ForEach(e => ... use if construction and add to array ... );

也许你有任何解决方案?

3 个答案:

答案 0 :(得分:8)

var twoArrays = emailTo.GroupBy(e => whiteList.Contains(e.Address),
                                (key,g) => g.ToArray())
                       .ToList();

var firstArray = twoArrays[0];
var secondArray = twoArrays[1]; 

注意:上面的firstArraysecondArray可能不是代码中的firstArraysecondArray。那是因为无法确定数组的顺序。为确保您可以在OrderBy(g=>g.Key)之后添加GroupBy,然后Select,请按以下方式添加:

var twoArrays = emailTo.GroupBy(e => whiteList.Contains(e.Address))
                       .OrderBy(g=>g.Key).Select(g=>g.ToArray())
                       .ToList();   
//Now the firstArray is always at the index 1
var firstArray = twoArrays[1];
var secondArray = twoArrays[0];                         

答案 1 :(得分:2)

您只需使用Enumerable.ToArray

var firstArray = emailTo.Where(e => whiteList.Contains(e.Address)).ToArray();
var secondArray = emailTo.Where(e => !whiteList.Contains(e.Address)).ToArray();

Side-Note_而不是List.ForEach,这是一个循环列表的.NET 2.0方法,我将使用简单的foreach。然后你不需要创建另一个集合。

foreach(var emailTo in firstArray)
{
    // ...
}

答案 2 :(得分:0)

var firstArray = emailTo.Where(e => whiteList.Contains(e.Address)).ToArray();
var secondArray = emailTo.Except(firstArray).ToArray();