IComparer 不对简单的 a b c 进行排序?
IComparer not sorting simple a b c?
我有我的字符串 class 设置并制作了一个 StringComparer
class 它实现了 IComparer
并且想在 Rank
上对我的字符串数组进行排序并显示它。目前它显示:
a,x,c
当我按 Rank
排序时。为什么会这样?它应该显示:
a,c,x
还是字母表一夜之间变了?
class Program
{
static void Main(string[] args)
{
String[] strings = { new String() { Name = "1123", Rank = "a" }, new String() { Name = "3123", Rank = "x" }, new String() { Name = "3134311", Rank = "c" } };
StringComparer comparer = new StringComparer();
comparer.SortBy = StringComparer.CompareField.Name;
Array.Sort(strings, comparer);
foreach (String s in strings)
{
Console.WriteLine(s.Name);
}
comparer.SortBy = StringComparer.CompareField.Rank;
Array.Sort(strings, comparer);
foreach (String s in strings)
{
Console.WriteLine(s.Rank);
}
}
}
class String
{
public string Name { get; set; }
public string Rank { get; set; }
}
class StringComparer : IComparer<String>
{
public enum CompareField
{
Name,
Rank
}
public CompareField SortBy = CompareField.Name;
public int Compare(String x, String y)
{
switch (SortBy)
{
case CompareField.Name:
return x.Name.CompareTo(y.Name);
case CompareField.Rank:
return x.Name.CompareTo(y.Rank);
}
return x.Name.CompareTo(y.Name);
}
}
你在做
x.Name.CompareTo(y.Rank)
(名次比较)
而不是
x.Rank.CompareTo(y.Rank)
(比较排名)
我有我的字符串 class 设置并制作了一个 StringComparer
class 它实现了 IComparer
并且想在 Rank
上对我的字符串数组进行排序并显示它。目前它显示:
a,x,c
当我按 Rank
排序时。为什么会这样?它应该显示:
a,c,x
还是字母表一夜之间变了?
class Program
{
static void Main(string[] args)
{
String[] strings = { new String() { Name = "1123", Rank = "a" }, new String() { Name = "3123", Rank = "x" }, new String() { Name = "3134311", Rank = "c" } };
StringComparer comparer = new StringComparer();
comparer.SortBy = StringComparer.CompareField.Name;
Array.Sort(strings, comparer);
foreach (String s in strings)
{
Console.WriteLine(s.Name);
}
comparer.SortBy = StringComparer.CompareField.Rank;
Array.Sort(strings, comparer);
foreach (String s in strings)
{
Console.WriteLine(s.Rank);
}
}
}
class String
{
public string Name { get; set; }
public string Rank { get; set; }
}
class StringComparer : IComparer<String>
{
public enum CompareField
{
Name,
Rank
}
public CompareField SortBy = CompareField.Name;
public int Compare(String x, String y)
{
switch (SortBy)
{
case CompareField.Name:
return x.Name.CompareTo(y.Name);
case CompareField.Rank:
return x.Name.CompareTo(y.Rank);
}
return x.Name.CompareTo(y.Name);
}
}
你在做
x.Name.CompareTo(y.Rank)
(名次比较)
而不是
x.Rank.CompareTo(y.Rank)
(比较排名)