Ruby 相当于 Python 列表理解

0 ruby loops list-comprehension

如何在 Ruby 中编写这样的循环?

hashTable = [node(None, -1, None, None, -1) for i in range(0, tableLength)]
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下操作:

hash_table = [table_length.times do |x|
  x = NODE.new(@key, @val, @next, @prev, @pos)
  x
end]
Run Code Online (Sandbox Code Playgroud)

@key, @val...我在调用该类时传递值的位置,如下所示:

this = NODE.new(nil, -1, nil, nil, -1)
this.read_file("alice.txt")
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

Jor*_*ing 6

你离我们并不遥远。当然,有几种方法可以做到这一点。

\n\n

na\xc3\xafve 方式:

\n\n
hash_table = []\n\ntable_length.times do\n  hash_table << Node.new(nil, -1, nil, nil, -1)\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

功能方式:

\n\n
hash_table = table_length.times.map do\n  Node.new(nil, -1, nil, nil, -1)\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

惯用的方式:

\n\n
hash_table = Array.new(table_length) { Node.new(nil, -1, nil, nil, -1) }\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后一个选择是最好的。Array构造函数以 Fixnumn和块作为参数,将计算块n时间并将结果作为数组返回。我喜欢的一个演示是rand

\n\n
Array.new(5) { rand(0..10) }\n# => [3, 10, 0, 8, 7]\n
Run Code Online (Sandbox Code Playgroud)\n