【发布时间】:2015-04-19 03:43:18
【问题描述】:
我遇到了一段旧代码,它使用 ruby 中的简单数组创建哈希数据类型。我得到了大部分,除了一部分:
据我了解,@store 的每个元素都是特定键/值对的内存位置,作为键的函数。所以@store[3] 通常会存储对应于 key=3, key=53, ... 的键/值对,并且通常在 key % size == 3 的位置(在这种情况下大小 = 50)。
但是,当我设置hash[3] = 7、hash[53] = 9 等时,@store 数组的每个元素都填充了键/值对,而不仅仅是索引 3 元素。似乎 []=(key, value) 方法中的行 @store[store_key] << [key, value] 正在将 [key, value] 添加到 @store 的每个元素,而不仅仅是索引 store_key 的元素。有什么想法吗?
class SimpleHash
attr_accessor :size, :store
def initialize(size)
@size = size
@store = Array.new(size, [])
end
def []=(key, value)
store_key = key % @size
index = find_key(key, @store[store_key])
if index
@store[store_key][index][1] = value
else
p "***********************************"
p @store
@store[store_key] << [key, value]
p "after"
p store_key
p @store
end
end
end
hash = SimpleHash.new(50)
p hash
hash[3] = 5
p hash
hash[3] = 7
hash[53] = 9
hash[103] = 11
hash[104] = 11
【问题讨论】:
标签: ruby arrays data-structures hash