c# - 对两个数组(值,键)进行排序,然后对键进行排序

标签 c# arrays

我有一个看起来很简单的问题,但到目前为止我无法弄清楚。

假设我有两个数组:

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/

相关文章:

c# - Microsoft Graph API 无法发送电子邮件 C# 控制台

c - 使用数组在C上打印偶数和奇数时输出巨大的数字

ios - 在没有结构/模型的情况下读取 JSON 属性

c# - 使用 '+' 运算符的字符串连接

c# - 如何调用状态条中的进度条?

c# - 在 C# 中使用自由泛型类型参数模拟委托(delegate)

javascript - 如何使用lodash通过键将一个数组对象添加到另一个二维数组

PHP 如何将对象数组与数组数组合并

JavaScript 数组,返回键 :value pairs with specific key

c# - 如何在C#中实现P2P?