【发布时间】:2017-10-09 13:21:43
【问题描述】:
我是 C# 的新手,刚刚遇到了一个奇怪的行为。
这是一段脚本,应该按字母顺序(A-Z)对字符串数组进行排序
这是数组:
IFF-7/12
IFA-7/11
IFF-7/8
IFF-7/2
IFF-7/11
IFF-7/1
IF-7/1
IFF-7/6
IFF-7/9
IFF-7/13
IFF-7/14
IF-7/2
所以我想结果应该是:
IF-7/1
IF-7/2
IFA-7/11
IFF-7/1
IFF-7/2
IFF-7/6
IFF-7/8
IFF-7/9
IFF-7/11
IFF-7/12
IFF-7/13
IFF-7/14
程序脚本:
for (int i = 0; i < faculty.GroupCount; i++)
{
for (int j = i + 1; j < faculty.GroupCount; j++)
{
if (faculty.Groups[j].Name.CompareTo(faculty.Groups[i].Name) < 0)
{
temp = faculty.Groups[i];
faculty.Groups[i] = faculty.Groups[j];
faculty.Groups[j] = temp;
}
}
}
但实际结果是
IF-7/1
IF-7/2
IFA-7/11
IFF-7/1
IFF-7/11
IFF-7/12
IFF-7/13
IFF-7/14
IFF-7/2
IFF-7/6
IFF-7/8
IFF-7/9
我知道它在做什么,但我不知道为什么。 我也不能使用像 .sort 这样的任何库或方法。
感谢您的帮助。
【问题讨论】:
-
您应该使用
IComparer<T>来实现此功能:msdn.microsoft.com/en-us/library/8ehhxeaf(v=vs.110).aspx -
因为按字符串排序的数字排在 1,10,11,12,2,3,4,5,6,7,8,9 .. 因为所有数字都排在 2.. 之前。跨度>
-
你假设的结果是不正确的,因为假设破折号
-在字母之后排序,而实际上它在字母之前排序,甚至在数字之前(它的十六进制代码是0x45,而代码零'0'是 0x48)。