Как инициализировать массив в один шаг с помощью Ruby?
Я инициализирую массив таким образом:
array = Array.new
array << '1' << '2' << '3'
можно ли сделать это в один шаг? Если да, то как?
9 ответов:
как отмечали другие, вы можете использовать литерал массива:
array = [ '1', '2', '3' ]
вы также можете, например, использовать диапазон:
array = ('1'..'3').to_a # parentheses are required # or array = *('1'..'3') # parentheses not required, but included for clarity
для массивов многих строк, разделенных пробелами, проще всего это обозначение:
array = %w[ 1 2 3 ]
В общем, вы можете передать блок в массив.новый и использовать это, чтобы определить, что значение для каждой записи будет:
array = Array.new(3){ |i| (i+1).to_s }
наконец, хотя он не производит тот же массив из трех строк, что и другие ответы выше, Отметим также, что вы можете использовать перечислители в Ruby 1.8.7+ для создания массивов; например:
array = 1.step(17,3).to_a #=> [1, 4, 7, 10, 13, 16]
Oneliner:
array = [] << 1 << 2 << 3 #this is for fixnums.
или
a = %w| 1 2 3 4 5 |
или
a = [*'1'..'3']
или
a = Array.new(3, '1')
или
a = Array[*'1'..'3']
наряду с приведенными выше ответами, вы можете сделать это тоже
=> [*'1'.."5"] #remember * => ["1", "2", "3", "4", "5"]
чтобы доказать, что есть больше, чем
одинШесть Способов Сделать Это:plus_1 = 1.method(:+) Array.new(3, &plus_1) # => [1, 2, 3]
если 1.метод (:+) не был возможен, вы также можете сделать
plus_1 = Proc.new {|n| n + 1} Array.new(3, &plus_1) # => [1, 2, 3]
конечно, это перебор в этом случае, но если
plus_1
было очень длинное выражение, Вы можете поместить его в отдельную строку от создания массива.
Если у вас есть массив строк, вы также можете инициализировать его следующим образом:
array = %w{1 2 3}
просто отделите каждый элемент с любым пробелом
можно сделать
array = ['1', '2', '3']
как отмечали другие, вы также можете инициализировать массив с нотацией %w следующим образом:
array = %w(1 2 3)
или
array = %w[1 2 3]
обратите внимание, что в обоих случаях каждый элемент-это строка, а не целое число. Поэтому, если вам нужен массив, элементы которого являются целыми числами, вы не должны обертывать каждый элемент апострофами:
array_of_integers = [1, 2, 3]
Также вам не нужно ставить запятую между элементами (что необходимо при создании массив без этой нотации %w). Если вы сделаете это (что я часто делал по ошибке), как в:
wrong_array = %w(1, 2, 3)
его элементы будут состоять из трех строк ---- "1,", "2,", "3". Так что если вы:
puts wrong_array
вывод будет:
1, 2, 3 =>nil
это не то, что мы хотим здесь.
надеюсь, это поможет прояснить суть!