如何在Ruby中编写这样的循环?
hashTable = [node(None, -1, None, None, -1) for i in range(0, tableLength)]
我已经尝试了以下内容:
hash_table = [table_length.times do |x|
x = NODE.new(@key, @val, @next, @prev, @pos)
x
end]
我在调用课程时传递@key, @val...
的值,如下所示:
this = NODE.new(nil, -1, nil, nil, -1)
this.read_file("alice.txt")
但它没有用。
答案 0 :(得分:4)
你离我不远。当然,有几种方法可以做到这一点。
天真的方式:
hash_table = []
table_length.times do
hash_table << Node.new(nil, -1, nil, nil, -1)
end
功能方式:
hash_table = table_length.times.map do
Node.new(nil, -1, nil, nil, -1)
end
习惯的方式:
hash_table = Array.new(table_length) { Node.new(nil, -1, nil, nil, -1) }
最后一个选项是最好的。给定Fixnum n
和块作为参数的Array constructor将评估块n
次并将结果作为数组返回。我喜欢的演示是rand
:
Array.new(5) { rand(0..10) }
# => [3, 10, 0, 8, 7]