c# - 直接降序排列

标签 c# sorting

我有

List<string> strs;
double[] values;

其中 values 数组包含 strs 列表中每个字符串的值

strs={"abc","def","ghi"}values={3,1,2} 这意味着“abc”的值为 3,依此类推。

我希望对按值排序的 strs 和值进行排序,这样它就变成了

strs={"def","ghi","abc"}
values={3,2,1}

我正在使用

string[] strsArr = strs.ToArray();
Array.Sort(values, strsArr);//1. sort it ascendingly
strs = strsArr.ToList();
Array.Reverse(strs);//2. reverse it

有没有一种方法可以直接按降序排序而不需要 2 个阶段?

最佳答案

您可以使用字典和 Linq 来解决这个问题。

var dict = new Dictionary<string, double>() 
{ 
           {"abc",3}, 
           {"def",1}, 
           {"ghi",2} 
};
var sorted = dict.OrderByDescending(g => g.Value)
                 .Select(g => g.Key)
                 .ToArray();

请注意,除非您在末尾有一个 ToArray() ,否则排序将被推迟到稍后枚举,并且可能会意外地被枚举多次。

关于c# - 直接降序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811382/

相关文章:

c# - DataRow 中的 LINQ 结果

javascript - 按字母顺序对JSON排序(最后为空值)

php - Wordpress 自定义帖子类型列排序查询

c++ - 快速排序的最大元素交换次数

java - 二分查找和插入排序

从 C++ 编写 C# 脚本?

c# - 具有内部方法的 Java 公共(public)类

c# - 作为查询字符串附加的属性

c# - 如何填充 C# comboBox 中的空白区域作为对用户的提示?

arrays - 将n个玩家分成大小为k且强度相等(或略有不同)的两支球队