2016-03-21 2 views
-1

Как написать такой цикл в Ruby?Ruby-эквивалент для понимания списка Python

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

Но это не за работой.

ответ

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

Последний вариант является лучшим. Array constructor, учитывая Fixnum n и блокировать как аргументы, будет оценивать блок n раз и возвращать результаты в виде массива. Демонстрация, которую я увлекаюсь, - rand:

Array.new(5) { rand(0..10) } 
# => [3, 10, 0, 8, 7] 
Смежные вопросы