我按照这些instructions为二维数组创建了一个自定义类。
class SparseArray
attr_reader :hash
def initialize
@hash = {}
end
def [](key)
hash[key] ||= {}
end
def rows
hash.length
end
alias_method :length, :rows
end
如何修改此类,以便我可以使用Object#遍历对象的第一级和第二级?请简单解释一下,我是新手。
我将如何在对象上使用每个方法的示例:
sparse_array[0][0] = "row 1 column 1"
sparse_array[0][1] = "row 1 column 2"
sparse_array[1][0] = "row 2 column 1"
sparse_array.each do |row|
# sparse_array[0] on first iteration
row.each do |column|
# sparse_array[0][0] on first iteration
end
end
答案 0 :(得分:1)
您应该在each
上定义SparseArray
方法并使用它来包装已包装哈希的values
:
def each &block
@hash.values.each(&block)
end
答案 1 :(得分:1)
Hash
也有each
方法:
hash.each {|key, value| puts "#{key} #{value}" }
但如果你想要一个更好的方法,请把它放在你的班级中:
def each(&block)
hash.each do |row,column_hash|
column_hash.each do |column, value|
block.call(row,column,value)
end
end
end
然后你可以这样做:
sparse_array.each do |row, column, value|
puts "row: #{row}, column: #{column}, value: #{value}"
end