2011-08-15 32 views
2

所以我有一個for循環多數民衆贊成取決於什麼傳遞創建散列或數組。動態命名陣列/散列在Ruby中

我需要創建這些陣列和基於在什麼被傳遞名稱哈希。

其大致相同

window['MyNewArray-' + i] = []; 

在javascript中。有沒有Ruby的等價物?

+2

如果你需要創建動態的名字你的代碼是最有可能打破變量。考慮將這些元素放入一個數組/類似字符的容器中。 – ThiefMaster

+0

因爲我有嵌套數組,並希望將它們提升一個級別。所以,而不是說容器[0] [0] Id喜歡有一堆頂層數組訪問。事實上它是一種必需品。我不會做普通的事情。 – OVERTONE

回答

4

你可以這樣做:

window = {} 
5.times do |i| 
    window["my_new_array_#{i}"]=[] 
end 
+1

我很確定他想要實際變量而不是名爲'window'的對象(這是JavaScript中的全局範圍)。 – ThiefMaster

2

這相同的代碼不工作在Ruby中,也和做同樣的事情。

+1

只有數字應該轉換成字符串'window ['MyNewArray-'+ i.to_s] = [];' – fl00r

+0

@ fl00r:啊,是的,沒錯。慣用的方法是使用字符串插值:'window [「MyNewArray - #{i}」] = []'。 –

2

那麼你可以使用創建Ruby哈希:

h = {} 

,然後添加使用store[]=操作一個鍵/值對。

像這樣:

h["foo_#{i}"] = [] 

Documentation

1
window = Hash[1.upto(5).map { |n| ["name-#{i}", []] }]