Inicjalizuję tablicę w ten sposób:
array = Array.new
array << '1' << '2' << '3'
Czy można to zrobić w jednym kroku? Jeśli tak to jak?
array = Array.new << 1 << 2 << 3
)
1
na '1'
.
Inicjalizuję tablicę w ten sposób:
array = Array.new
array << '1' << '2' << '3'
Czy można to zrobić w jednym kroku? Jeśli tak to jak?
array = Array.new << 1 << 2 << 3
)
1
na '1'
.
Odpowiedzi:
Możesz użyć literału tablicowego:
array = [ '1', '2', '3' ]
Możesz również użyć zakresu:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
W przypadku tablic ciągów rozdzielanych białymi znakami można użyć składni ciągu procentowego :
array = %w[ 1 2 3 ]
Możesz również przekazać blok, aby Array.new
określić, jaka będzie wartość dla każdego wpisu:
array = Array.new(3) { |i| (i+1).to_s }
Na koniec, chociaż nie generuje tej samej tablicy trzech ciągów, co inne odpowiedzi powyżej, zauważ również, że możesz użyć modułów wyliczających w Ruby 1.8.7+ do tworzenia tablic; na przykład:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
to_a
( [*'1'..'3']
).
Array[ "1","2","3"] #=> ["1","2","3"]
(nie sądzę, aby ta metoda miała cokolwiek wspólnego z konstruktorem literału tablicy). Możesz również użyć tablicy Kernel # najwyższego poziomu (nazwa metody wygląda jak nazwa klasy)Array(1..5) #=> [1,2,3,4,5]
Oneliner:
array = [] << 1 << 2 << 3 #this is for fixnums.
lub
a = %w| 1 2 3 4 5 |
lub
a = [*'1'..'3']
lub
a = Array.new(3, '1')
lub
a = Array[*'1'..'3']
[1,2,3]
która wykonuje pojedynczą inicjalizację. Poza tym masz więcej postaci. Ponadto utworzyłeś tablicę liczb poprawek, podczas gdy OP pytał o tablicę ciągów.
Wraz z powyższymi odpowiedziami możesz to zrobić
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
.
Aby udowodnić, że jest więcej niż jeden sześć sposobów, aby to zrobić:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
Gdyby metoda 1.metoda (: +) nie była możliwa, można by to również zrobić
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
Jasne, w tym scenariuszu jest to przesada, ale jeśli plus_1
było to naprawdę długie wyrażenie, możesz chcieć umieścić je w osobnym wierszu od tworzenia tablicy.
Możesz to zrobić
array = ['1', '2', '3']
Jak zauważyli inni, możesz również zainicjować tablicę z notacją% w w następujący sposób:
array = %w(1 2 3)
lub
array = %w[1 2 3]
Należy pamiętać, że w obu przypadkach każdy element jest łańcuchem, a nie liczbą całkowitą. Więc jeśli chcesz mieć tablicę, której elementy są liczbami całkowitymi, nie powinieneś zawijać każdego elementu apostrofami:
array_of_integers = [1, 2, 3]
Nie musisz też umieszczać przecinka między elementami (co jest konieczne przy tworzeniu tablicy bez tej notacji% w). Jeśli to zrobisz (co często robiłem przez pomyłkę), na przykład:
wrong_array = %w(1, 2, 3)
jego elementami będą trzy ciągi ---- „1”, „2”, „3”. Więc jeśli to zrobisz:
puts wrong_array
wynik będzie następujący:
1,
2,
3
=>nil
czego tutaj nie chcemy.
Mam nadzieję, że to pomoże wyjaśnić sprawę!
Aby utworzyć taką tablicę, możesz zrobić:
array = ['1', '2', '3']
Jeśli masz tablicę ciągów, możesz ją również zainicjować w następujący sposób:
array = %w{1 2 3}
po prostu oddziel każdy element dowolną spacją
Możesz to po prostu zrobić za pomocą %w
notacji w tablicach ruby.
array = %w(1 2 3)
Doda wartości tablicy 1, 2, 3 do tablicy i wydrukuje dane wyjściowe jako ["1", "2", "3"]