如何通过哪里获得两个数组
本文关键字:两个 数组 何通过 | 更新日期: 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];
注意:上面的firstArray
和secondArray
可能不是代码中的firstArray
和secondArray
。这是因为数组的顺序无法确定。为了确保这一点,您可能需要在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();