Я ініціалізую масив таким чином:
array = Array.new
array << '1' << '2' << '3'
Чи можливо це зробити за один крок? Якщо так, то як?
array = Array.new << 1 << 2 << 3
)
1
до '1'
.
Я ініціалізую масив таким чином:
array = Array.new
array << '1' << '2' << '3'
Чи можливо це зробити за один крок? Якщо так, то як?
array = Array.new << 1 << 2 << 3
)
1
до '1'
.
Відповіді:
Ви можете використовувати літерал масиву:
array = [ '1', '2', '3' ]
Ви також можете використовувати ряд:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
Для масивів рядків, обмежених пробілом, ви можете використовувати синтаксис Stcent 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]
to_a
( [*'1'..'3']
).
Array[ "1","2","3"] #=> ["1","2","3"]
(Я не думаю, що цей метод не має нічого спільного з конструктором прямої масиву). Ви також можете використовувати ядро вищого рівня # Array (назва методу схожа на назву класу)Array(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']
[1,2,3]
одного робить ініціалізацію. Також у вас більше символів. Крім того, ви створили масив Fixnums, тоді як OP запитував про масив рядків.
Поряд з вищезазначеними відповідями, ви можете це зробити і ви
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
.
Для того, щоб довести Там більше , ніж один Шість способів зробити це:
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
був дійсно довгий вираз, ви, можливо, захочете поставити його окремим рядком від створення масиву.
Ви можете зробити
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
чого ми не хочемо тут.
Сподіваюсь, це допоможе з’ясувати точку!
Ви можете просто зробити це з %w
позначеннями в рубінових масивах.
array = %w(1 2 3)
Це додасть значення масиву 1,2,3 до масиву та виведе вивід у вигляді ["1", "2", "3"]