3

我有一个 UTF-8 字符串列表,我想使用Enumerable.OrderBy对其进行排序。字符串可以包含任意数量的字符集——例如,英语、德语和日语,或者它们的混合,甚至。

例如,这是一个示例输入列表:

["東京","North 東京", "München", "New York", "Chicago", "大阪市"]

我对使用StringComparer.CurrentCulture是否是传递给的正确字符串比较参数感到困惑OrderBy()。如果应用程序的当前文化是,en-US但我仍然想“正确”排序 UTF-8 数据而不仅仅是en-US排序规则?

我的困惑可能源于我对Oracle 中NLSSORT函数的理解,该函数与 .NET 字符串比较和排序语义不太匹配。例如,设置 NLS_SORT=Japanese_M 意味着它将正确地对拉丁语、西欧语和日语进行排序,无论是否有任何或所有字符出现在可排序列的给定字符串中。

4

2 回答 2

4

没有一种比较适用于所有文化。

缺少检测语言并相应地选择,InvariantCulture 是您最好的选择。作为您链接的文档,请注意:

不要:在大多数情况下使用基于 StringComparison.InvariantCulture 的字符串操作;少数例外之一是保留具有语言意义但与文化无关的数据。

我加了重点。这个例外或多或少是你在做什么。

于 2010-01-06T21:34:40.073 回答
1

盯着球看:你排序是为了帮助人类在列表中找到一个字符串。您需要一位熟练的语言专家同时了解英语、德语和日语的排序规则。一个人关注你的名单的几率是多少?始终确保根据当地文化规则对列表进行排序,并且排序是本地化的。

于 2010-01-06T21:56:52.827 回答