-3

私はメールのコレクションを持っています。式を使用して 2 つの配列を取得する必要がありますwhere

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

これを行う方法?

PS私が書いている間、私はこれを行う方法を理解しました:

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

多分あなたは何か解決策を持っていますか?

4

3 に答える 3

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

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

:上記は正確でなく、コードに含まれていない場合がfirstArrayあります。これは、配列の順序を決定できないためです。確認するために、 の後に追加すると、次のようになります。secondArrayfirstArraysecondArrayOrderBy(g=>g.Key)GroupBySelect

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];                         
于 2013-09-03T07:03:17.697 に答える
2

あなたはただ使用する必要がありますEnumerable.ToArray

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

List.ForEachリストをループする .NET 2.0 メソッドの代わりに Side-Note_を使用しforeachます。その後、別のコレクションを作成する必要はありません。

foreach(var emailTo in firstArray)
{
    // ...
}
于 2013-09-03T07:01:56.897 に答える
0
var firstArray = emailTo.Where(e => whiteList.Contains(e.Address)).ToArray();
var secondArray = emailTo.Except(firstArray).ToArray();
于 2013-09-03T07:13:36.393 に答える