2011-08-30 77 views
2

我將信息添加到使用此代碼的字典:訂購一個字典

foreach (string word in lineList) 
{ 
    if (dictionary.ContainsKey(word)) 
     dictionary[word]++; 
    else 
     dictionary[word] = 1; 
} 

// I believe this is what needs to change..? 
var ordered = from k in dictionary.Keys select k; 

當我使用StreamWriter打印出其打印出來在它加入到dictionary順序的行。

我想要做的是打印出來的訂單首先比較PartDescription然後PartNumber並打印出來的數字。

文件看起來是這樣的:

PartDescription  PartNumber  Name  X  Y  Rotation 
1608RTANT    147430   J1  20.555 -12.121  180 
TANTD     148966   J2  20.555 -12.121  270 
SOMETHING    148966   R111  20.555 -12.121  360 
SOMETHING    148966   C121  20.555 -12.121  180 
SOMETHING    148966   R50  205.555 -12.121  180 
SOMETHING    148966   R51  -205.555 125.121  270 
SOMETHING    148966   R52  20.555 -12.121  0 
SOMETHING    148966   C12  20.555 -12.121  0 
1709RTANT    147430   C98  20.555 -12.121  0 
1608RTANT    147429   QD1  20.555 -12.121  180 
1709RTANT    147430   F12  20.555 -12.121  0 
1609RTANT    147445   P9  20.555 -12.121  180 

StreamWriter想這樣的輸出:

1, 1608RTANT, 147429, 1 //Line#, PartDescription, PartNumber, # of Duplicates (from dictionary key) 
2, 1608RTANT, 147430, 1 
3, 1609RTANT, 147445, 1 
4, 1709RTANT, 147430, 2 
5, SOMETHING, 148966, 6 
6, TANTD, 148966, 1 
+1

也可以使用SortedDictionary 。它比Dictionary 稍慢,因爲SD是O(log 2 n),D是O(1),但它會始終保持數據的排序順序。僅取決於哪一種方法對您的使用更重要:可能的最快查找或保持數據順序。如果你只是將它排序一次輸出,就按建議排序。我只是想拋出另一個選項,以防萬一你需要在多個地方使用這些數據,那麼排序的代價可能會增加,並使SD值稍微慢一些。 –

回答

7

那麼你肯定能拿到鑰匙在一個有序的方式容易:

var ordered = from k in dictionary.Keys orderby k select k; 

甚至更​​簡單:

var ordered = dictionary.Keys.OrderBy(x => x); 

注意,你不應該在字典存儲在其中添加它們的順序對依靠 - 基本上你應該不承擔任何排序從字典。

+0

哇。快。簡單。 :) 謝謝! – theNoobGuy

+0

我已更新問題 – theNoobGuy

+0

@theNoobGuy:您的更新代碼與原始代碼沒有明顯關係 - 沒有排序的跡象。請發佈簡短但完整的*程序來證明問題。 –