2016-03-21 12 views
-1

Rubyでこのようなループを書く方法を教えてください。Pythonのリストの理解に相当するRuby

hashTable = [node(None, -1, None, None, -1) for i in range(0, tableLength)] 

私はすでに次のことを試してみました:

次のように私は、クラスを呼んでいるとき、私は @key, @val...の値を渡している
hash_table = [table_length.times do |x| 
    x = NODE.new(@key, @val, @next, @prev, @pos) 
    x 
end] 

this = NODE.new(nil, -1, nil, nil, -1) 
this.read_file("alice.txt") 

しかし、それはありませんワーキング。

答えて

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) } 

最後のオプションが最適です。フィックスナムnとブロックを引数として指定したArray constructorは、ブロックnを評価し、結果を配列として返します。私が好きなデモは、randとなります。

Array.new(5) { rand(0..10) } 
# => [3, 10, 0, 8, 7]