2016-01-12 29 views
2

值的键如何排序基于存储在一个单独的阵列中的C#值如何排序基于存储在单独的阵列

int[] keys = new int[] {1, 2, 3, 4, 7}; 
double[] vals = new double[] {0.5, 0.2, 0.3, 0.1, 0.4}; 

我想排序键阵列的阵列键数组基于vals数组中的值即。得到以下顺序按键排列:

4, 2, 3, 7, 1 

我尝试做以下

Array.Sort(keys, (a, b) => vals[a].CompareTo(vals[b])); 

,但我得到了以下错误:

Additional information: Unable to sort because the IComparer.Compare() method returns inconsistent results. Either a value does not compare equal to itself, or one value repeatedly compared to another value yields different results. IComparer: 'System.Array+FunctorComparer`1[System.Int32]'. 

我猜参数a和b指键值而不是键值数组中的键值。

回答

5

这是否适合您?

int[] sorted = 
    vals 
     .Zip(keys, (v, i) => new { v, i }) 
     .OrderBy(x => x.v) 
     .Select(x => x.i) 
     .ToArray(); 

这给出了这样的结果:

result

+0

感谢的答案,但它不正是我想要实现的。我更新了我的问题。这不仅仅是从1开始索引。这应该被理解为关键。对不起,这个误解,请看我更新的例子。 –

+0

@SebastianWidz - 我的第一个答案在'keys'上可以很好地工作。 – Enigmativity