列表<t>。不按字母顺序排序</t>

时间:2013-09-24 21:08:05

标签: .net c#-4.0

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

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

lst_animals.Sort();

排序后我的名单是:猫,狗,大象,鬣蜥,鬣狗????鬣狗&amp;鬣蜥乱了吗?

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

我错过了什么?

谢谢

3 个答案:

答案 0 :(得分:5)

您需要在拆分后修剪值,因为空格会抛弃排序(使hyena跟在iguana之后,因为hyena不是以空格开头的。

List<string> lst_animals = new List<string>(str_animals.Split(',').Select(x => x.Trim()));

答案 1 :(得分:1)

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

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

var animals = str_animals.Split(',').Select (a => a.Trim());

答案 2 :(得分:0)

只需使用

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

",_"中的空格很重要!

就像其他人指出的那样,只用逗号分割就会让分割字符串有一个前缀空格。在有关排序的信件之前还有一个空格。