我有一个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)
我喜欢自我记录,明显的代码.