下面附有代码。
arrayy = [[1,'one'],[2,'two'],[3,'three']]
hashy = {}
i = 0
arrayy.each do
hashy[arrayy[i,0]] = arrayy [i,1]
i = i+1
end
puts hashy[1]
puts hashy[2]
puts hashy[3]
end
此代码不输出任何内容。没有错误。因此,我猜测问题是哈希表中没有添加任何内容。
答案 0 :(得分:6)
不确定您要在这里实现什么,但是当您在循环中执行arrayy [i,0]时,您表示要获取零个元素。
当您传入两个数字作为数组的参数时,第一个数字是目标值的索引,第二个数字是长度。例如:
arr = ['a', 'b', 'c', 'd', 'e']
puts arr[2, 3]
这将显示['c','d','e'],它是“从索引2的元素开始,获取3个元素”。
答案 1 :(得分:4)
您要请求零个元素,这是一个空数组,因此您要对空数组上的所有内容进行键控,并且所有元素都会发生碰撞。要解决此问题,只需使用迭代器,因为each
为您提供了所需的元素:
arrayy = [[1,'one'],[2,'two'],[3,'three']]
hashy = {}
arrayy.each do |key, value|
hashy[key] = value
end
p hashy
# => {1=>"one", 2=>"two", 3=>"three"}
在您的代码中,您得到的实际结果是:
p hashy
# => {[]=>[[3, "three"]]}
在这里您可以看到正在使用的[]
键。 p
方法对于查看事物的内部结构非常方便。 p hashy
等同于puts hashy.inspect
。
正如Sergio指出的那样,您可能以错误的方式引用了数组。要深入浏览两个级别,请执行以下操作:
hashy[arrayy[i][0]] = arrayy [i][1]
[i,0]
的意思是“在数组 i 的索引处选择下一个 0 元素”,而[i][0]
的意思是“在索引处的数组处 i 选择索引为 0 “的值。
值得注意的是,最简单的解决方案是使用已经执行此操作的Array#to_h
:
arrayy = [[1,'one'],[2,'two'],[3,'three']]
hashy = array.to_h
p hashy
# => {1=>"one", 2=>"two", 3=>"three"}