【发布时间】:2012-05-05 04:55:35
【问题描述】:
我有一个奇怪的要求,我似乎无法理解。我需要想出一个函数,该函数将接受一个文本字符串并返回一个与该字符串相对应的数字 - 这样,在排序时,这些数字将与原始字符串的顺序相同。例如,如果我的函数产生这个映射:
"abcd" -> x
"abdef" -> y
"xyz" -> z
那么数字必须是x < y < z。字符串可以是任意长度,但总是非空的,并且字符串比较应该不区分大小写(即"ABC" 和"abc" 应该产生相同的数值)。
我的第一个想法是将每个字母映射到相应的数字 1 到 26,然后得到结果数字,例如a = 1, b = 2, c = 3, ..., z = 26,然后"abc" 将变为1*26^2 + 2*26 + 3,但是后来我意识到文本字符串可以包含任何语言的任何文本(即完整的 unicode),所以这是行不通的。在这一点上,我被困住了。在我告诉客户草皮之前还有其他想法吗?
附:这种奇怪的要求是由于专有系统的限制,只能按数字字段进行排序。如果任何其他字段类型需要排序,则必须将其转换为某种数字表示 - 然后进行排序。不要问。
【问题讨论】:
-
你能在应用程序之外进行排序吗?即做一个正常的阿尔法排序,那么你的映射只是排序列表中的索引?
-
@TonyHopkinson 如果数据不是来自应用程序本身,这将是一个选项。
-
允许什么样的数字?你能做任意精度的实数或分数吗?
-
@templatetypedef 我想是的。这是 5 年前的事了,我什至不记得那个项目是什么了 :)
-
哈哈哈,谢谢。我只是偶然发现了这个问题,并认为它真的很有趣。 :-)
标签: string sorting language-agnostic