2012-10-10 25 views
4

降序我已經排序直接

List<string> strs; 
double[] values; 

其中值數組包含每個串的中的STR列表中的值

strs={"abc","def","ghi"}values={3,1,2} 。這意味着「ABC」具有值3等上。

我希望按照值排序的可疑交易報告和值進行排序,使得它成爲

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直接由高到低依次排序呢階段?

+0

只是好奇。然後你可以按照http://stackoverflow.com/questions/289/how-do-you-sort-a-c-sharp-dictionary-by-value的答案 – nithins

+0

'SortedDictionary'就是要做的。 – IAbstract

+0

@IAbstract看起來他希望按值排序。 SortedDictionary按鍵排序。 – nithins

回答

3

您可以使用字典和LINQ to解決這個問題。

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的()排序將被推遲,直到後來枚舉並可能會意外地列舉多次。

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

我覺得你忘了只提取字符串部分,現在結果類型不兼容。 –

+0

@ BenVoigt - 是的,你說得對。複製並粘貼錯誤。現在修復。 – Enigmativity