我想更改字符串的排序,使其基于以下字母:
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;
}
}
非常感谢任何帮助。
答案 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);
}
}