假设我们有一个带数据的数组:
double[] x = new double[N] {x_1, ..., x_N};
一个大小为N
的数组,其中包含与x
的元素相对应的标签:
int[] ind = new int[N] {i_1, ..., i_N};
如何最快地选择所有带有特定标签I
的元素从x
中,根据ind
?
例如,
x = {3, 2, 6, 2, 5}
ind = {1, 2, 1, 1, 2}
I = ind[0] = 1
结果:
y = {3, 6, 2}
显然,使用循环可以轻松地完成这项任务(但不够高效和简洁),但我认为应该有一种使用.Where
和lambda表达式的方法..谢谢。
编辑:
MarcinJuraszek提供的答案是完全正确的,谢谢。然而,如果我们有通用类型,您能否看看问题所在:
T1[] xn = new T1[N] {x_1, ..., x_N};
T2[] ind = new T2[N] {i_1, ..., i_N};
T2 I = ind[0]
使用提供的解决方案时,我收到一个错误提示:"委托 'System.Func' 不接受 2 个参数":
T1[] y = xn.Where((x, idx) => ind[idx] == I).ToArray();
非常感谢。
T2 == T2
(或T2.Equals(T2)
)- 添加泛型约束where T2 : IEquatable
。 - MarcinJuraszekxs
是T1
,ind
是T2
,results
是T2
,它会说“类型T2不能用作类型参数...没有从T2到System.IEquatable<T2>的装箱转换或类型参数转换”。我知道我做错了什么,你的回答很好。如果您能帮忙,我将不胜感激。 - Oleg ShirokikhT2
没有实现IEquatable<>
接口。请实现它,然后它就可以工作了。 - MarcinJuraszek