2012-12-06 27 views
0

我有一組數據,其中包含名稱和關聯的內容。因此,我會用類似HashTableDictionary的東西來存儲這些項目。對HashTable,Dictionary等中的元素進行排序

我需要用兩個優先級對這些數據進行排序。首先他們應該按照字母順序排列,然後按照特定的順序將一些項目放在開頭。

如果字母順序是我唯一的要求,我會使用SortedDictionary。該字典根據密鑰自動對元素進行排序。

我正在尋找的是一個類,它允許我做:

  1. 以字母順序
  2. 移動添加元素以隨機順序
  3. 排序的所有元素(或刪除和插入)元素開頭(或更通用:在我想要的任何地方)。
+0

理論上你能想出一個比較方法來指定順序嗎?如果是這樣,有幾個集合類,你可以使用(我會發佈一個正確的答案)。 –

+0

@MthetheWWatson好的,沒錯。我必須將這些特定元素的正確順序應用到這種比較方法中。不知道這是不是一個很好的解決方案。儘管如此,也是可以的。 – Em1

回答

1

爲什麼不看SortedList<TKey, TValue>

這應該有適當的功能,讓你做你想做的,它是快速的排序!

+0

那麼,這個集合並不具備所有適當的功能,但是我實現了比較方法來滿足我的需求。接受,因爲這種方法最接近我所尋找的,而所有其他人的答案也很好。 – Em1

1

沒有內置集合,做你所需要的,但你可以建立自己的比較容易:

  • 寫的IDictionary<TKey,TValue>
  • 的實現將一個Dictionary<TKey,TValue> dictList<TKey> keys
  • 將元素添加到dict時,還要將其密鑰添加到keys
  • 當請求迭代時,迭代keys然後查找條目在dict

如果您收藏組織這樣一來,你能夠獨立的字典項的鍵重新排序。由於在更改字典的操作中應該發生的雙重「簿記」,您在實現時需要小心。除此之外,解決方案應該相對簡單。

+0

我希望避免兩次鑰匙。但我認爲這種方法是實施一個簡潔解決方案的一種非常明智的方式。 – Em1

1

如果此數據的名稱可以重複,則您沒有提供信息。一般來說,我認爲你可以用不同的方式來保存這些數據。你應該記住,Dictonaries的本質是保存鍵/值數據,其中鍵是唯一的。元素的順序不是字典的本質。這是我認爲的更多列表問題。所以你可以嘗試將Dictionary與Linq混合到Objects。但也許嘗試使用通用

List< KeyValuePair< TKey, TValue>>. 
+0

好主意。我會給它一個鏡頭。 – Em1

相關問題