Ruby相当于Python列表理解

时间:2016-03-21 21:02:59

标签: ruby loops list-comprehension

如何在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")

但它没有用。

1 个答案:

答案 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]