我想按照其首字母对字符串排序的列表进行分组。比方说,这是列表:按文化意识初始字母组字符串
azaroth
älgkebab
orgel
ölkorv
当列表根据sv-SE
排序,这是排序顺序:
azaroth
orgel
älgkebab
ölkorv
这意味着按首字母分组将
A
azaroth
O
orgel
Ä
älgkebab
Ö
ölkorv
这是有道理的,这也是你如何在一个使用sv-SE
的国家的电话簿中找到它。
当列表根据en-US
排序,这是排序顺序:
älgkebab
azaroth
ölkorv
orgel
现在到了有趣的部分。这意味着,按首字母分组将
AÄ
älgkebab
azaroth
OÖ
ölkorv
orgel
由于所有的实际目的,“A”和“A”分别为相同的字母排序中治疗,所以是“o”和“O”这意味着他们为此目的相同的初始。这是AFAIK如何在一个使用en-US
的国家/地区的电话簿中找到它。
我的问题是,如何以编程方式实现这个分组,当它因文化而异?或换句话说,您如何知道在特定文化中排列列表时,哪些字母被视为“相同”?
例如,对于“a”与“ä”,我还没有找到使StringComparer
返回0
的方法。
我,似乎工作的解决方案,它做到这一点:
if (
cultureInfo.CompareInfo.GetSortKey("a").KeyData[1] ==
cultureInfo.CompareInfo.GetSortKey("ä").KeyData[1]
) // same initial (this will return false for sv-SE and true for en-US)
问题是,我不知道它是否适用于任何文化,甚至什么在第二个数据片KeyData
实际上是SortKey
的数组。 page on MSDN比较模糊,可能有目的地如此。所以我宁愿有一个更可靠的解决方案。
有趣。这与我目前使用的非常相似,除了使用'SortKey'的'AreEqual'。您的'AreEqual'是一个优雅的方式,使得“StringComparer为'a'和'ä'返回0',就像我在问题中写的那样。 :) – bzlm 2011-04-01 07:19:12