質問

I'm wanting to create a IComparer<string> for a SortedDictionary<string, int> that will sort everything alphabetically but if it see a key of 'Other' it will put 'Other' at the end of the list.

役に立ちましたか?

解決

You mean like this?

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);
     }
}

Usage:

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

Obviously, you can make this more generic by writing a SpecialCaseAtEndComparer<T> by:

  1. Allowing the "special" value to be injected into the comparer.
  2. Allowing the "normal" comparer to be injected into the comparer.
  3. Making the comparer work for all types, not just strings.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top