2012-09-21 17 views
0

我想換8個字符串爲整型和減1。我寫的代碼爲:如何將多個字符串變量改爲整數和減1?

foo1, foo2, too3 ... = foo1.to_i - 1, foo2.to_i - 1, foo3.to_i -1, ... 

但我覺得它太複雜。有沒有更好的方法來達到這個目標?

+0

很酷【紅寶石】的標題! – jdoe

+3

@jdoe不是真的......問題已經有了標籤。它充其量是多餘的。 –

+0

@jdoe謝謝,我希望它更明顯.. –

回答

0

將它們放在數組中將是最簡單的事情。

%w{ 1 2 3 4 5 6 7 8 }.map!(&:to_i).map!(&:pred) 
=> [0, 1, 2, 3, 4, 5, 6, 7] 
0

你不應該使用這個,eval是危險和動態的。我建議將你的值移入一個散列,你可以控制這些鍵。如果你想要做你問字面上:

(1..2).map {|n | eval("foo#{n}").to_i - 1} 

例子:

> foo1 = 2 
=> 2 
> foo2 = 3 
=> 3 
> (1..2).map {|n | eval("foo#{n}").to_i - 1} 
=> [1, 2] 

...不可怕的方式來存儲/處理這些值:

> hash = { :foo1 => 2, :foo2 => 3 } 
=> {:foo1=>2, :foo2=>3} 
hash.keys.inject({}) { |h, key| h[key] = hash[key].to_i - 1; h } 
=> {:foo1=>1, :foo2=>2} 
+0

你誤會了我.. foo1,foo2只是表示參數的名稱,它們可能是'anyletters =「123」,another =「456」', –

2
[:foo1, :foo2, ... etc. ...].each { |foo| eval "#{foo} = #{foo}.to_i - 1" } 

如果你決定這樣做,這是一個壞主意。

+0

@AlexD Fixed !我被前標題矇蔽了:) – jdoe

0

當你與8個變量工作,需要做對他們同樣的操作通常意味着他們有某種聯繫,並可以分組,例如在哈希:

data = {:foo1 => "1", :foo2 => "2", ...} 
data2 = Hash[data.map { |key, value| [key, value.to_i - 1] }] 

注意,而不是更新就地值我創建一個新的對象,功能方法通常更清晰。

0

基於對@Winfields解決您的評論,這可能是不夠的:

foo1 = "123" 
foo2 = "222" 
too3 = "0" 
def one_less_int(*args) # the splat sign (#) puts all arguments in an array 
args.map{|str| str.to_i-1} 
end 
p one_less_int(foo1, foo2, too3) #=> [122, 221, -1] 

但把一切在一個陣列事前,爲他人所提出的建議,是更加明確。

相關問題