基于选择掩码的数组切片

3

给定两个数组:

double[] a = new double[]{1.0, 2.0, 3.0};
bool[] b = new bool[]{true, false, true};

有没有一种简单的方法根据 ba 中进行选择?在 R 和其他脚本语言中,您可以这样说:

a[b]

如何在C#中获取{1.0, 3.0},我无法确定是否存在一种干净的方法(不涉及显式循环)。也许我应该以不同的方式组织我的数据?

3个回答

6

使用LINQ的Zip方法,例如:

a.Zip(b, (i, j) => new {i, j}).Where(x => x.j).Select(x => x.i)

1
不错的方法,我之前不知道有Zip方法。 - Jens Nielsen

5
您可以使用LINQ实现此操作:
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]);

错误的使用。条件在哪里?它只会将b复制到结果中。 - Nikhil Agrawal

4

还有一种更传统的LINQ方法:

b.Select((f, i) => f ? i : - 1).Where(i => i != -1).Select(i => a[i]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接