Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 直接降序排序_C#_Sorting - Fatal编程技术网

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();