给定两个数组:
double[] a = new double[]{1.0, 2.0, 3.0};
bool[] b = new bool[]{true, false, true};
有没有一种简单的方法根据 b
在 a
中进行选择?在 R 和其他脚本语言中,您可以这样说:
a[b]
如何在C#中获取{1.0, 3.0}
,我无法确定是否存在一种干净的方法(不涉及显式循环)。也许我应该以不同的方式组织我的数据?
使用LINQ的Zip
方法,例如:
a.Zip(b, (i, j) => new {i, j}).Where(x => x.j).Select(x => x.i)
double[] a = new double[]{1.0, 2.0, 3.0};
bool[] b = new bool[]{true, false, true};
var result = a.Where((item, index)=>b[index]);
还有一种更传统的LINQ方法:
b.Select((f, i) => f ? i : - 1).Where(i => i != -1).Select(i => a[i]);