我提出了这个琐事问题,并认为这是相当简单的。这个人让我解释为什么这个列表没有按字母顺序排序。我认为这是一个棘手的问题,直到我把它扔进一个小的存根项目,他们是对的...没有技巧它不按字母顺序排序。我用谷歌搜索,我读到的一切都说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算法。这个实现执行不稳定的排序;也就是说,如果两个元素相等,它们的顺序可能不会被保留。相反,一个稳定的排序保留了等于“但鬣狗和鬣蜥不相等的元素的顺序,所以我不认为那种不稳定的排序很重要。
我错过了什么?
谢谢
答案 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(", "));
",_"
中的空格很重要!
就像其他人指出的那样,只用逗号分割就会让分割字符串有一个前缀空格。在有关排序的信件之前还有一个空格。