C#Custom Sort String IComparer

时间:2017-04-11 12:17:23

标签: c# .net sorting

我想更改字符串的排序,使其基于以下字母:

A,E,I,O,U,F,G,L,M,N,P,S,T,V,H,K,R

代替标准A,B,C,D ...... X,Y,Z

所以我开始尝试创建一个IComparer,但坚持如何实现。

到目前为止我得到的并不多。

public class CustomSort : IComparer<string>
{
    public int Compare(string a, string b)
    {
        return 1;
    }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

它应该是这样的:

最后,您逐个字符地比较,找到Order字符串中字符的“索引”。也许为了加快速度,您可以将Order字符串转换为Dictionary<char, int>,其中int是“权重”。

public class CustomSort : IComparer<string>
{
    public const string Order = "AEIOUFGLMNPSTVHKR";

    public int Compare(string a, string b)
    {
        if (a == null)
        {
            return b == null ? 0 : -1;
        }

        if (b == null)
        {
            return 1;
        }

        int minLength = Math.Min(a.Length, b.Length);

        for (int i = 0; i < minLength; i++)
        {
            int i1 = Order.IndexOf(a[i]);
            int i2 = Order.IndexOf(b[i]);

            if (i1 == -1)
            {
                throw new Exception(a);
            }

            if (i2 == -1)
            {
                throw new Exception(b);
            }

            int cmp = i1.CompareTo(i2);

            if (cmp != 0)
            {
                return cmp;
            }
        }

        return a.Length.CompareTo(b.Length);
    }
}