0

我想创建一个IComparer<string>for a SortedDictionary<string, int>,它会按字母顺序对所有内容进行排序,但如果它看到“Other”键,它会将“Other”放在列表的末尾。

4

1 回答 1

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. 使比较器适用于所有类型,而不仅仅是字符串。
于 2013-04-11T04:05:27.483 回答