Я инициализировать массив таким образом:Как инициализировать массив за один шаг с помощью Ruby?
array = Array.new
array << '1' << '2' << '3'
Можно ли сделать это за один шаг? Если да, то как?
Я инициализировать массив таким образом:Как инициализировать массив за один шаг с помощью Ruby?
array = Array.new
array << '1' << '2' << '3'
Можно ли сделать это за один шаг? Если да, то как?
Как уже отмечалось, вы можете использовать массив литерал:
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.new и использовать, чтобы определить, какое значение для каждой записи будет:
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]
Плюс один для подробного ответа, хотя я предпочитаю splat над 'to_a' (' [* '1' .. '3'] '). –
@MichaelKohl Согласен; Я был под (ошибочным) впечатлением, что вы не могли спланировать диапазоны в 1.8.6. Я добавлю это, спасибо! Обратите внимание, что вам не нужно выделять внутри литерала массива (если вы не компонуете вместе с символом splat). – Phrogz
Я знаю, это просто, что я в основном использую splat для этой цели (композиция, которая есть), и мне также нравится, что она показывает, в чем вы заканчиваете. –
Для создания такого массива вы могли бы сделать:
array = ['1', '2', '3']
Вы можете инициализировать массив в одном шаге от записи элементов в []
так:
array = ['1', '2', '3']
Если у вас есть массив строк, вы также можете инициализировать его следующим образом:
array = %w{1 2 3}
просто отделить каждый элемент с любой пробельных
Наряду с указанными выше ответами, вы можете сделать это слишком
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
В 1.9 вы также можете сделать это следующим образом: '>> [*? 1 ..? 5] # => [" 1 "," 2 "," 3 "," 4 "," 5 "]'. –
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']
Зачем кому-то голосовать? – pankajdoharey
Я не голосовал, но я предполагаю, потому что это вызвало три метода и постепенно увеличивало массив, в отличие от '[1,2,3]', который выполняет одиночную инициализацию. Кроме того, у вас больше персонажей. Кроме того, вы создали массив Fixnums, тогда как OP задавал вопрос о массиве строк. – Phrogz
Чтобы доказать Там больше, чем Один Шесть способов сделать это:
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
был действительно долго выражение, вы можете поставить его на отдельной линии от создание массива.
Вы можете просто сделать это с помощью нотации %w
в рубиновых массивах.
array = %w(1 2 3)
Это добавит массив значений 1,2,3 к arrayand распечатке на выходе как ["1", "2", "3"]
Вы можете сделать
array = ['1', '2', '3']
Как уже отмечалось, вы можете также инициализировать массив с обозначениями% вес следующим образом:
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
, который не то, что мы хотим здесь.
Надеюсь, что это поможет уточнить суть!
+1 только для новый однострочный повторный толкание. :) – Phrogz
@Phrogz немного короче: 'array = Array.new << 1 << 2 << 3';) –
@AlexanderSuraphel Создает массив Fixnums вместо массива строк. – Phrogz