2016-02-13 127 views
0

比方說,我有一個循環重複1000次。是否可以將一個變量的值插入到另一個變量的名稱中?

上的循環,我把1000個變量,就像這樣:

@n1 = "blabla" 
@n2 = "blabla" 
@n3 = "blabla" 
@n4 = "blabla" 
... 

我也有一個變量@count計數其迭代循環上,即。它從1開始,每個循環增加1。 我想要做的是打印@n1如果@count = 1,打印@n2如果@count = 2,等等。換句話說,我想讓ruby使用@count的值來決定使用哪個@n_變量。我不想使用條件語句,因爲我需要1000條。

事情是這樣的:

@count = 1 
if @count < 1001 
    puts @("n + @count") 
    @count = @count + 1 
end 

有沒有辦法做到這一點?

+3

是的,這是可能的,但這是一個糟糕的設計選擇。改用Array或Hash。 –

+0

一旦你將1000個字符串移動到一個數組中,你可以寫'array.each {| string |放入字符串}'(或者簡單地'放入數組') – Stefan

回答

1

是的,你可以這樣做呢:

if @count < 1001 
    instance_variable_set("@#{@count}", @count + 1) 
end 

這將是更地道的哈希值,例如存儲

h = {} 
if @count < 1001 
    h[@count] = @count + 1 
end 
2

比方說,你有一個名爲foo的一個實例,萬千實例變量,通過他們全部循環,你可以這樣做:

foo.instance_variables.each do |v| 
    p foo.instance_variable_get(v) 
end 

這就是說,你也可以使用字符串名稱取其中:

1000.times do |count| 
    p foo.instance_variable_get("@n#{count}") 
end 
1

雖然你可以使用類似instance_variable_get,你通常會使用一個數組或散列存儲您的字符串:

n = ["blabla", "blabla", "blabla", ... ] 

count = 0 
if count < 1000 
    puts n[count] 
    count += 1 
end 
相關問題