開發一個小調查webapp,遇到問題,處理評分類型問題的範圍。 所以評級的範圍可以是:Ruby:將String轉換爲Integer的最佳方式,或者在必要時將其保留爲String?
1..10
-5..0
-5..5
'a'..'z'
'E'..'M'
等
範圍被存儲在數據庫中對VARCHAR處理的(開始和結束的範圍)。所以範圍總是以字符串輸入開始。
什麼是最好的方式來採取這些字符串值並相應地建立一個Ruby範圍。 我不能只是去value.to_i,因爲這對字符串迭代不起作用。有一堆if似乎很難看。有更好的方法嗎?
不一樣重要,但值得問: 另外如果我想使所有的工作與反向範圍?說5到0或G到A。我知道Ruby不支持反向範圍(因爲它使用succ()來迭代)。這裏最好的方法是什麼?
提前致謝!
更新:
基於沃特·德憋的建議,我已經決定在此:
def to_int_or_string(str)
return str.match(/^-?\d+$/) ? str.to_i : str.strip
end
def ratings_array(from, to)
from = to_int_or_string(from)
to = to_int_or_string(to)
from > to ? Range.new(to, from).to_a.reverse : Range.new(from, to).to_a
end
有什麼想法?
a =(a.to_i == 0 && a!=「0」)? a:a.to_i可能不會做所期望的事情;如果a =「1,234」,結果將爲1. – steenslag 2010-09-20 21:58:03
好點。但我不期望數字是那麼大 – Swartz 2010-09-20 23:40:54
1,234 == 1234或1.234?在第一種情況下,如果您在數據庫中存儲帶有分隔符的整數並且應該對您的輸入進行消毒,我認爲您的設計很糟糕。 無論如何,修正很容易從字符串中刪除所有逗號,然後將它們轉換爲整數(gsub('。',''))。如果它是一個浮點數,請檢查字符串中的一個點,並在其上調用.to_f。 (雖然在上面的用例中浮點數的範圍沒有多大意義) – xinit 2010-09-21 05:58:03