我有一个看起来很简单的问题,但到目前为止我无法弄清楚。
假设我有两个数组:
int[] values = {10,20,20,10,30};
int[] keys = {1,2,3,4,5};
Array.Sort(values,keys);
那么数组看起来像这样:
values = {10,10,20,20,30};
keys = {4,1,2,3,5};
现在,我想做的是让键也按第二优先级排序,因此键数组看起来像这样:
keys = {1,4,2,3,5};
注意 1 和 4 的值互换了,值数组的顺序没有改变。
最佳答案
如果“就地排序”对您来说不是绝对必要的,我建议使用 OrderBy
:
var sortedPairs = values.Select((x, i) => new { Value = x, Key = keys[i] })
.OrderBy(x => x.Value)
.ThenBy(x => x.Key)
.ToArray(); // this avoids sorting 2 times...
int[] sortedValues = sortedPairs.Select(x => x.Value).ToArray();
int[] sortedKeys = sortedPairs.Select(x => x.Key).ToArray();
// Result:
// sortedValues = {10,10,20,20,30};
// sortedKeys = {1,4,2,3,5};
关于c# - 对两个数组(值,键)进行排序,然后对键进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4308649/