C# 直接降序排序
我有 我正在使用C# 直接降序排序,c#,sorting,C#,Sorting,我有 我正在使用 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 Dictionary Dictiona
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
Dictionary Dictionary=newdictionary();
加上(“abc”,3);
字典。添加(“定义”,1);
字典。添加(“ghi”,2);
var sortedDict=dictionary.OrderByDescending(x=>x.Value);
double[]values=sortedDict.Select(x=>x.Value.ToArray();
List strs=sorteddit.Select(x=>x.Key.ToList();
您可以使用字典和Linq来解决此问题
Dictionary<string, double> dictionary = new Dictionary<string, double>();
dictionary.Add("abc", 3);
dictionary.Add("def", 1);
dictionary.Add("ghi", 2);
var sortedDict = dictionary.OrderByDescending(x => x.Value);
double[] values = sortedDict.Select(x => x.Value).ToArray();
List<string> strs = sortedDict.Select(x => x.Key).ToList();
var dict=newdictionary()
{
{“abc”,3},
{“def”,1},
{“ghi”,2}
};
var sorted=dict.OrderByDescending(g=>g.Value)
.选择(g=>g.Key)
.ToArray();
注意,除非最后有一个ToArray(),否则排序将推迟到以后枚举,并且可能会意外地被枚举多次。这样如何:
var dict = new Dictionary<string, double>()
{
{"abc",3},
{"def",1},
{"ghi",2}
};
var sorted = dict.OrderByDescending(g => g.Value)
.Select(g => g.Key)
.ToArray();
只是好奇为什么你不使用字典,因为你基本上是在创建地图。然后您可以按照
SortedDictionary
中的答案进行操作。@IAbstract看起来想按值排序。SortedDictionary按键排序。@william007:按降序值排序意味着您的值将按如下方式排序:3,2,1
。如果您希望您的值(如您在预期结果中所述)为1、2、3
,则您将按升序值进行排序。@IAbstract您是对的,我已编辑了问题,感谢您指出错误;)我想你忘了只提取字符串部分,现在结果类型不兼容。@BenVoigt-是的,你是对的。复制粘贴错误。现在修好了。
var dict = new Dictionary<string, double>()
{
{"abc",3},
{"def",1},
{"ghi",2}
};
var sorted = dict.OrderByDescending(g => g.Value)
.Select(g => g.Key)
.ToArray();
var strs = new [] { "abc", "def", "ghi", };
var values = new [] { 3, 1, 2, };
strs =
strs
.Zip(values, (s, v) => new { s, v })
.OrderByDescending(sv => sv.v)
.Select(sv => sv.s)
.ToArray();