我在这里添加了对这个问题的答案:在 C#中排序List<String>
,它需要自然的排序顺序,即处理嵌入数字的顺序。
然而,我的实现是幼稚的,代替所有关于应用程序如何通过假设事情(土耳其测试任何人?)来正确处理 Unicode 的帖子,我想我会寻求帮助来编写更好的实现。或者,如果有.NET的内置方法,请告诉我:)
我对该问题的答案的实现只是遍历字符串,逐个字符进行比较,直到在两者中都遇到一个数字。然后它从两个字符串中提取连续的数字,这可能导致长度不同,用前导零填充最短的数字,然后进行比较。
但是,它存在问题。
例如,如果您在字符串 x 中有两个代码点,它们一起构成字符 È,但在另一个字符串中您只有一个代码点,即那个字符。
我的算法会在这些问题上失败,因为它将变音符号代码点视为单个字符,并将其与另一个字符串中的 È 进行比较。
谁能指导我如何正确处理这个问题?我希望支持指定一个CultureInfo
对象来处理语言问题,比如在德国比较“ss”和“ß”,以及类似的事情。
我想我需要让我的代码枚举“真实字符”(我不知道这里的真实术语)而不是单个代码点。
什么是正确的方法?
另外,如果“自然”意味着“人类期望它的工作方式”,我会添加以下内容来思考:
- 日期和时间呢?
- 浮点值呢?
- 还有其他被认为是“自然”的序列吗?
- 这应该延伸到什么程度?(Eeny,meeny,miny,萌)