为什么字符串数组排序不正确?

时间:2017-10-09 13:21:43

标签: c# arrays sorting

我在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

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

12之前的顺序与A之前的B相同,因此11位于2之前。< / p>

你似乎想要一种通常被称为“自然排序”的东西,就像字母排序一样,除了两个具有相同开头的字符串数量不同,然后数字整数的数值(所有的运行数字)进行比较。这不是.NET框架直接提供的排序规则,但answers like this解释了如何创建自然排序的IComparer<string>