【发布时间】:2013-04-03 19:07:24
【问题描述】:
假设我们有一个包含数据的数组:
double[] x = new double[N] {x_1, ..., x_N};
以及大小为N的数组,包含与x的元素对应的标签:
int[] ind = new int[N] {i_1, ..., i_N};
根据ind从x中选择具有特定标签I的所有元素的最快方法是什么?
例如,
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();
非常感谢
【问题讨论】:
标签: c# arrays linq select lambda