2011-07-09 36 views
1

現在我正在處理一個項目,該項目發出由字母和數字組成的ID,例如345A22。我需要這個程序能夠說明,例如,345B22大於345A22。我不能認爲這些字母會一直處於相同的位置(也就是說我們有22335Q的某些id),但是當我比較兩個數字時,這些字母將處於相同的位置。如何確定在Ruby中一個字母數字ID大於另一個?

如何在Ruby中完成此操作?

回答

3

您可以使用String#<=>方法比較字符串。請參閱文檔here

>> "345B22" <=> "345A22"             
=> 1 

1返回值意味着345B22更大。

2

如果一個簡單的字符串比較不會執行此操作(例如不同的長度等),請嘗試將這些ID(假設它們全部匹配^[0-9A-Z]*$)轉換爲整數,方法是將它們視爲base36編碼的數據。

1

不知道我理解你的問題,但我猜你在思維上將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進行排序。

2

在Ruby中,字符串與數字具有相同的比較方法。

2 > 1 #=> true 
"2" > "1" #=> true 
"B" > "A" #=> true 
相關問題