直接降序排序

时间:2012-10-10 03:03:38

标签: c# sorting

我有

List<string> strs;
double[] values;

其中values数组包含strs list

中每个字符串的值

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

有没有一种方法可以直接按降序排序,没有两个阶段?

3 个答案:

答案 0 :(得分:3)

您可以使用Dictionary和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(),否则排序将推迟到以后枚举,并且可能会多次枚举。

答案 1 :(得分:2)

这个怎么样:

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

答案 2 :(得分:0)

尝试使用字典:

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