Linq:使用Zip排除结果

Ed *_*aty 5 c# linq

我有一个bool列表和一个字符串列表.我想使用IEnumerable.Zip来组合列表,因此如果第一个列表的每个索引的值为true,则结果包含第二个列表中的相应项.

换一种说法:

 List<bool> listA = {true, false, true, false};
 List<string> listB = {"alpha", "beta", "gamma", "delta"};
 IEnumerable<string> result = listA.Zip(listB, [something]); 
 //result contains "alpha", "gamma"
Run Code Online (Sandbox Code Playgroud)

我能想出的最简单的解决方案是:

 listA.Zip(listB, (a, b) => a ? b : null).Where(a => a != null);
Run Code Online (Sandbox Code Playgroud)

...但我怀疑有一种更简单的方法可以做到这一点.在那儿?

usr*_*usr 10

我认为这更简单:

listA
 .Zip(listB, (a, b) => new { a, b } )
 .Where(pair => pair.a)
 .Select(pair => pair.b);
Run Code Online (Sandbox Code Playgroud)

这在逻辑上将步骤分开.首先,结合列表.接下来,过滤.没有时髦的条件,只需从上到下阅读并立即得到它.

你甚至可以正确命名它:

listA
 .Zip(listB, (shouldIncludeValue, value) => new { shouldIncludeValue, value } )
 .Where(pair => pair.shouldIncludeValue)
 .Select(pair => pair.value);
Run Code Online (Sandbox Code Playgroud)

我喜欢自我记录,明显的代码.