3

给定两个数组:

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

有没有一种简单的方法来选择a基于b?在 R 和其他脚本语言中,您会说:

a[b]

得到{1.0, 3.0}. 我不知道在 C# 中是否有一种干净的(不涉及显式循环)方法来执行此操作。也许我应该以不同的方式组织我的数据?

4

3 回答 3

6

使用 LINQZip方法,例如:

a.Zip(b, (i, j) => new {i, j}).Where(x => x.j).Select(x => x.i)
于 2012-05-17T10:11:52.180 回答
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]);
于 2012-05-17T10:13:27.437 回答
4

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

b.Select((f, i) => f ? i : - 1).Where(i => i != -1).Select(i => a[i]);
于 2012-05-17T10:13:46.443 回答