假设我们有一个包含数据的数组:
double[] x = new double[N] {x_1, ..., x_N};
N
以及包含与 的元素相对应的标签的大小数组x
:
int[] ind = new int[N] {i_1, ..., i_N};
根据选择x
具有特定标签的所有元素的最快方法是什么?I
ind
例如,
x = {3, 2, 6, 2, 5}
ind = {1, 2, 1, 1, 2}
I = ind[0] = 1
结果:
y = {3, 6, 2}
显然,使用循环可以轻松(但不是有效和清洁)完成,但我认为应该有办法使用.Where
和 lambdas来做到这一点..谢谢
编辑:
MarcinJuraszek 提供的答案是完全正确的,谢谢。但是,我已经简化了这个问题,希望它能在我原来的情况下工作。如果我们有泛型类型,您能否看看有什么问题:
T1[] xn = new T1[N] {x_1, ..., x_N};
T2[] ind = new T2[N] {i_1, ..., i_N};
T2 I = ind[0]
使用提供的解决方案,我收到错误“Delegate 'System.Func' does not take 2 arguments”:
T1[] y = xn.Where((x, idx) => ind[idx] == I).ToArray();
非常感谢你