我有
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
有没有一种方法可以直接按降序排序,没有两个阶段?
答案 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();