我有一個奇怪的要求,我似乎無法得到我的頭。我需要想出一個函數,它會接受一個文本字符串並返回一個與該字符串相對應的數字 - 這樣,當排序時,這些數字將按照與原始字符串相同的順序進行排列。例如,如果我的函數產生該映射:在保留排序的同時將文本轉換爲數字?
"abcd" -> x
"abdef" -> y
"xyz" -> z
則號碼必須使得x < y < z
。字符串可以是任意長度,但始終爲非空字符串,並且字符串比較應該不區分大小寫(即"ABC"
和應該導致相同的數值)。
我的第一個嘗試是將每個字母映射到相應的數字1到26,然後獲得結果數字,例如, a = 1, b = 2, c = 3, ..., z = 26
,然後會變成1*26^2 + 2*26 + 3
,然後我意識到文本字符串可以包含任何語言的任何文本(即完整的unicode),所以這是行不通的。此時我卡住了。在我告訴客戶解散之前有任何其他想法?
P.S.這個奇怪的要求是由於只能通過數字字段進行排序的專有系統的限制。如果任何其他字段類型需要排序,則必須將其轉換爲數字表示 - 然後進行排序。不要問。
你可以在應用程序之外進行排序嗎?即做一個正常的alpha排序,那麼你的映射只是排序列表中的索引? – 2012-04-24 14:25:02
@TonyHopkinson如果數據不是來自應用程序本身,那麼這將是一個選項。 – 2012-04-24 14:30:33
允許使用哪些數字?你可以做任意精度的實數或分數嗎? – templatetypedef 2017-07-19 21:35:07