c# – 字符串排序问题
发布时间:2020-12-15 08:44:57 所属栏目:百科 来源:网络整理
导读:我有以下编译为Sort.exe的C#代码: using System;using System.Collections.Generic;class Test{ public static int Main(string[] args) { string text = null; Liststring lines = new Liststring(); while((text = Console.In.ReadLine()) != null) { lin
我有以下编译为Sort.exe的C#代码:
using System; using System.Collections.Generic; class Test { public static int Main(string[] args) { string text = null; List<string> lines = new List<string>(); while((text = Console.In.ReadLine()) != null) { lines.Add(text); } lines.Sort(); foreach(var line in lines) Console.WriteLine(line); return 0; } } 我有一个文件input.txt,其中包含以下5行: x000000000000000000093.000000000 x000000000000000000037.000000000 x000000000000000100000.000000000 x000000000000000000538.000000000 x-00000000000000000020.000000000 现在,如果我在命令提示符下运行它,则输出如下: C:UsersgirijeshAppDataLocalTemp>sort < input.txt x000000000000000000037.000000000 x000000000000000000093.000000000 x-00000000000000000020.000000000 x000000000000000000538.000000000 x000000000000000100000.000000000 我无法理解什么样的字符串排序是以x-(输出中的第3行)开头的字符串出现在以x0开头的字符串的中间.第三行应该位于顶部或底部. Excel也显示相同的行为. 解决方法
在许多文化中(包括不变文化),连字符是一个对于排序目的而言不太重要的字符.在大多数文本中,这是有道理的:pre-whatever和prewhatever非常相似.例如,以下列表按此排序,我认为这是好的:
preasdf prewhatever pre-whatever prezxcv 您似乎想要进行 lines.Sort(StringComparer.Ordinal); 然后你的结果是: x-00000000000000000020.000000000 x000000000000000000037.000000000 x000000000000000000093.000000000 x000000000000000000538.000000000 x000000000000000100000.000000000 如果你想知道-… 20.0值为什么会在它所做的地方结束,那么考虑一下如果删除了 – (并与上面的前列表进行比较)会是什么样子. x000000000000000000037.000000000 x000000000000000000093.000000000 x00000000000000000020.000000000 x000000000000000000538.000000000 x000000000000000100000.000000000 如果您的输入始终采用x [某个数字]的格式,我会将x之后的值解析为十进制或双精度,然后对其进行排序.这样可以更容易地确保预期的行为,并且总体上更好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |