星期五, 12月 07, 2012

.NET SortedList 存放同樣 key 的物件

今天遇到使用 SortedList 時產生例外, 抱怨 key 相同, 這時我才注意到, 原來 SortedList 不能存放相同 key 的物件。不過其實嚴格來說, 並不是 key 相同就不能存放, 而是預設的比較器是很正規的比較, 當兩個比較對象相同時, 就會傳回 0, 而 SortedList 就會抱怨 key 相同, 產生例外。

根據上述, 解決方案其實很簡單, 就是自己實作一個只會傳回 1 與 -1 的比較器, 在建構 SortedList 時傳入, 這樣即使 key 相同也可以存入。比較器的實作非常簡單, 可參考這一篇討論串中一樓的解答


class MyComparer : IComparer
{

  public int Compare(int x, int y)
  {
    if (x < y)
      return -1;
    else return 1;
  }
}
非常簡單。

沒有留言: