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

本文关键字:两个 数组 何通过 | 更新日期: 2023-09-27 18:29:55

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

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

如何做到这一点?

附言:在我写作的时候,我已经明白了如何做到这一点:

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

也许你有什么解决方案?

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

var twoArrays = emailTo.GroupBy(e => whiteList.Contains(e.Address),
                                (key,g) => g.ToArray())
                       .ToList();
var firstArray = twoArrays[0];
var secondArray = twoArrays[1]; 

注意:上面的firstArraysecondArray可能不是代码中的firstArraysecondArray。这是因为数组的顺序无法确定。为了确保这一点,您可能需要在GroupBy之后附加OrderBy(g=>g.Key),然后像这样附加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];                         

您只需要使用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)
{
    // ...
}
var firstArray = emailTo.Where(e => whiteList.Contains(e.Address)).ToArray();
var secondArray = emailTo.Except(firstArray).ToArray();