自定义IComparer

时间:2013-04-11 03:52:25

标签: .net sorting icomparer

我想为IComparer<string>创建一个SortedDictionary<string, int>,它会按字母顺序对所有内容进行排序,但如果它看到“其他”的键,则会在列表的末尾添加“其他”。

1 个答案:

答案 0 :(得分:2)

你的意思是这样吗?

public sealed class MyComparer : Comparer<string>
{
     public override int Compare(string x, string y)
     {
         if(x == "Other")
            return y == "Other" ? 0 : 1;

         if(y == "Other")
            return -1;

         // Change this comparer if required.
         return StringComparer.OrdinalIgnoreCase.Compare(x, y);
     }
}

用法:

var dict = new SortedDictionary<string, int> (new MyComparer())
{ 
    { "Other", 1 }, { "aaa", 2 }, { "bbb", 3 }
};

显然,您可以通过编写SpecialCaseAtEndComparer<T>来使其更通用:

  1. 允许将“特殊”值注入比较器。
  2. 允许将“正常”比较器注入比较器。
  3. 使比较器适用于所有类型,而不仅仅是字符串。