0

我被提出了这个琐事问题,并认为它相当简单。这个人让我解释为什么这个列表没有按字母顺序排序。我认为这是一个技巧问题,直到我把它扔到一个小存根项目中,他们是对的……没有技巧,它不按字母顺序排序。我用谷歌搜索,我读到的所有内容都说 Sort() 会按我期望的方式工作。所以edjumakate我的天才。我显然没有答案。

string str_animals = "hyena, cat, elephant, dog, iguana";
List<string> lst_animals = new List<string>(str_animals.Split(','));

lst_animals.Sort();

排序后我的清单是:猫,狗,大象,鬣蜥,鬣狗????鬣狗和鬣蜥不正常?

MSDN 说“此方法使用 Array.Sort,它使用 QuickSort 算法。此实现执行不稳定排序;也就是说,如果两个元素相等,则可能不会保留它们的顺序。相反,稳定排序会保留元素的顺序是相等的”但是鬣狗和鬣蜥不相等,所以我认为不稳定的排序并不重要。

我错过了什么?

谢谢你

4

3 回答 3

5

hyena您需要在拆分后修剪值,因为空格会取消排序(iguana因为hyena不是以空格开头)。

List<string> lst_animals = new List<string>(str_animals.Split(',').Select(x => x.Trim()));
于 2013-09-24T21:12:32.557 回答
1

您正在使用拆分,它将字符串拆分为不同的字符串。鬣狗是第一个,前面没有空格。其他的前面都有空格,影响你的排序。

因此,您应该在拆分原始字符串后通过修剪字符串来删除前导空格。

var animals = str_animals.Split(',').Select (a => a.Trim());
于 2013-09-24T21:13:17.983 回答
0

只需使用

List<string> lst_animals = new List<string>(str_animals.Split(", "));

里面的空间",_"很重要!

就像其他人指出的那样,仅用逗号分割将使分割字符串具有前缀空格。在有关排序的字母之前有一个空格。

于 2013-09-24T21:13:34.493 回答