我在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 。
感谢您的帮助。
答案 0 :(得分:3)
1
在2
之前的顺序与A
之前的B
相同,因此11
位于2
之前。< / p>
你似乎想要一种通常被称为“自然排序”的东西,就像字母排序一样,除了两个具有相同开头的字符串数量不同,然后数字整数的数值(所有的运行数字)进行比较。这不是.NET框架直接提供的排序规则,但answers like this解释了如何创建自然排序的IComparer<string>
。