Как инициализировать массив за один шаг, используя Ruby? - PullRequest
97 голосов
/ 05 февраля 2011

Я инициализирую массив следующим образом:

array = Array.new
array << '1' << '2' << '3'

Возможно ли сделать это за один шаг?Если да, то как?

Ответы [ 9 ]

182 голосов
/ 05 февраля 2011

Вы можете использовать литерал массива:

array = [ '1', '2', '3' ]

Вы также можете использовать диапазон:

array = ('1'..'3').to_a  # parentheses are required
# or
array = *('1'..'3')      # parentheses not required, but included for clarity

Для массивов строк, разделенных пробелами, вы можете использовать Синтаксис Percent String :

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]
17 голосов
/ 28 сентября 2011

Онлайн:

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']
8 голосов
/ 22 апреля 2011

Наряду с ответами выше, вы можете сделать это тоже

    =>  [*'1'.."5"]   #remember *
    => ["1", "2", "3", "4", "5"]
7 голосов
/ 30 сентября 2011

Чтобы доказать, что есть нечто большее, чем Один Шесть способов сделать это:

plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]

Если 1.method (: +) был невозможен, вы также можете сделать

plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]

Конечно, в этом сценарии это излишне, но если plus_1 было действительно длинным выражением, вы можете поместить его на отдельной строке от создания массива.

3 голосов
/ 05 февраля 2011

Если у вас есть массив строк, вы также можете инициализировать его следующим образом:

array = %w{1 2 3}

просто отделите каждый элемент от любого пробела

2 голосов
/ 09 марта 2016

Вы можете сделать

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

это не то, что мы хотим здесь.

Надеюсь, это поможет прояснить ситуацию!

2 голосов
/ 05 февраля 2011

Чтобы создать такой массив, вы можете сделать:

array = ['1', '2', '3']
1 голос
/ 05 февраля 2011

Вы можете инициализировать массив за один шаг, записав элементы в [] следующим образом:

array = ['1', '2', '3']
0 голосов
/ 08 марта 2016

Вы можете просто сделать это с пометкой %w в массивах ruby.

array = %w(1 2 3)

Он добавит значения массива 1,2,3 в массив и распечатает вывод как ["1", "2", "3"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...