我想将键值对添加到循环中的哈希中。我的哈希看起来像这样
[ {'filename' => fileName1, 'filelocation'=> fileLocation1}, {'filename' => fileName2, 'filelocation'=> fileLocation2} ]
我使用以下代码来执行此操作。它不会添加所有值,而是添加最后一个键值对。
fileDetails= {}
doc = REXML::Document.new args[0]
doc.elements.each("node/congfigurations/config") {
|config|
fileName= config.elements["@fileName"].value
fileLocation= config.elements["@location"].value
fileDetails={'filename' => fileName, 'filelocation'=> fileLocation}
}
如何收集所有值?
答案 0 :(得分:3)
首先,您的预期输出不是哈希,而是一个数组。所以声明就像这样
fileDetails = []
在循环内部,进行此更改
fileDetails << {'filename' => fileName, 'filelocation'=> fileLocation}
# push the Hash into the array
修改强>
“它不会添加所有值,但是最后一个键值对”
这是因为您正在使用赋值运算符。因此,每次在循环中,变量都会被重新分配,最后您将获得最后指定的值。