1. ホーム
  2. c#

[解決済み] 2つのクエリを使用せずに、IEnumerableをブール値の基準で2つに分割することはできますか?

2023-07-16 03:07:31

質問

を分割することはできますか? IEnumerable<T> を二つの IEnumerable<T> をLINQを使用して、単一のクエリ/LINQステートメントのみを使用していますか?

を繰り返し実行するのを避けたいのですが IEnumerable<T> を2回繰り返すのを避けたいのです。 例えば、以下の最後の2つのステートメントを組み合わせて、allValuesが一度だけトラバースされるようにすることは可能でしょうか?

IEnumerable<MyObj> allValues = ...
List<MyObj> trues = allValues.Where( val => val.SomeProp ).ToList();
List<MyObj> falses = allValues.Where( val => !val.SomeProp ).ToList();

どのように解決するのですか?

これを使うことができます。

var groups = allValues.GroupBy(val => val.SomeProp);

あなたの例のように即座に評価することを強制するため。

var groups = allValues.GroupBy(val => val.SomeProp)
                      .ToDictionary(g => g.Key, g => g.ToList());
List<MyObj> trues = groups[true];
List<MyObj> falses = groups[false];