基于选择掩码切割数组

时间:2012-05-17 10:07:55

标签: c# .net arrays linq

给出两个数组:

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

是否有一种基于ab中进行选择的简便方法?在R和其他脚本语言中,您会说:

a[b]

获取{1.0, 3.0}。我无法弄清楚在C#中是否有干净(没有涉及显式循环)的方法。也许我应该以不同的方式组织我的数据?

3 个答案:

答案 0 :(得分:6)

使用LINQ Zip方法,例如:

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

答案 1 :(得分: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]);

答案 2 :(得分:4)

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

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