現在我正在處理一個項目,該項目發出由字母和數字組成的ID,例如345A22。我需要這個程序能夠說明,例如,345B22大於345A22。我不能認爲這些字母會一直處於相同的位置(也就是說我們有22335Q的某些id),但是當我比較兩個數字時,這些字母將處於相同的位置。如何確定在Ruby中一個字母數字ID大於另一個?
如何在Ruby中完成此操作?
現在我正在處理一個項目,該項目發出由字母和數字組成的ID,例如345A22。我需要這個程序能夠說明,例如,345B22大於345A22。我不能認爲這些字母會一直處於相同的位置(也就是說我們有22335Q的某些id),但是當我比較兩個數字時,這些字母將處於相同的位置。如何確定在Ruby中一個字母數字ID大於另一個?
如何在Ruby中完成此操作?
如果一個簡單的字符串比較不會執行此操作(例如不同的長度等),請嘗試將這些ID(假設它們全部匹配^[0-9A-Z]*$
)轉換爲整數,方法是將它們視爲base36編碼的數據。
不知道我理解你的問題,但我猜你在思維上將ID分解爲組件(所以345B22是345,B,22),然後希望對數字進行數字排序(例如, 12> 2)以及字符串排序(AB < B)。
如果這是你想要的東西,像下面這樣會做的伎倆:
ids.sort_by do |id|
id.scan(/\d+|[a-zA-Z]+/).map {|c| c =~ /\d/ ? c.rjust(20) : c.ljust(20) }.join
end
這樣做是提取出所有連續的數字或字母,然後根據它們的類型證明他們向左或向右,連接結果,然後根據這個(擴展的和規範化的)id進行排序。
在Ruby中,字符串與數字具有相同的比較方法。
2 > 1 #=> true
"2" > "1" #=> true
"B" > "A" #=> true