2011-02-05 12 views
80

zainicjować tablicę w ten sposób:Jak zainicjować tablicę w jednym kroku używając Ruby?

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

jest to możliwe do zrobienia, że ​​w jednym kroku? Jeśli tak to jak?

+15

+1 tylko dla powielających powtarzających się pojedynczych linii. :) – Phrogz

+1

@Phrogz nieco krótszy: 'tablica = Array.new << 1 << 2 << 3';) –

+0

@AlexanderSuraphel Tworzy tablicę Fixnums zamiast tablic ciągów. – Phrogz

Odpowiedz

156

jak inni to zauważyli, można użyć tablicę dosłowne:

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

Można też, dla przykładu, użyj gama:

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

W przypadku tablic z wieloma znakami rozdzielonymi odstępami białymi, najprościej jest ta notacja:

array = %w[ 1 2 3 ] 

Ogólnie można przekazać blok Array.new i używać, aby określić, jaka jest wartość dla każdego wpisu będą:

array = Array.new(3){ |i| (i+1).to_s } 

Wreszcie, choć nie wytwarzają taką samą tablicę trzech ciągów jako inne odpowiedzi powyżej, zauważ także, że możesz używać liczników w Ruby 1.8.7+, aby tworzyć tablice; na przykład:

array = 1.step(17,3).to_a 
#=> [1, 4, 7, 10, 13, 16] 
+4

Plus jeden dla szczegółowej odpowiedzi, mimo że wolę ikonę od 'to_a' (' [* '1' .. '3'] '). –

+0

@MichaelKohl Zgadzam się; Byłem pod wpływem (błędnego) wrażenia, że ​​nie można wyświetlać zakresów w 1.8.6. Dodam to, dzięki! Zauważ, że nie musisz się rozprowadzać w literaturze (chyba, że ​​komponujesz razem z ikoną). – Phrogz

+0

Wiem, po prostu w tym celu używam głównie splat (compositing) i podoba mi się także to, że pokazuje, z czego wyszedłeś. –

2

Aby stworzyć taką tablicę można zrobić:

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

można zainicjować tablicę w jednym kroku pisząc elementy w [] tak:

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

Jeśli masz tablicę ciągów można również zainicjować w następujący sposób:

array = %w{1 2 3}

prostu oddzielić każdy element z każdej spacji

8

wraz z powyższych odpowiedzi, można to zrobić za

=> [*'1'.."5"] #remember * 
    => ["1", "2", "3", "4", "5"] 
+1

W wersji 1.9 możesz to zrobić w następujący sposób: '>> [*? 1 ..? 5] # => [" 1 "," 2 "," 3 "," 4 "," 5 "]". –

11

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'] 
+2

dlaczego ktoś miałby głosować to ....? – pankajdoharey

+8

Nie przegłosowałem go, ale zgaduję, ponieważ wywołało to trzy metody i stopniowo powiększa tablicę, w przeciwieństwie do '[1,2,3]', które powoduje pojedynczą inicjalizację. Ponadto twoja postać ma więcej postaci. Ponadto utworzyłeś tablicę Fixnums, podczas gdy OP pytał o tablicę łańcuchów. – Phrogz

7

Aby udowodnić Nie więcej niż One Sześć sposobów, aby to zrobić:

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

: 1.Metoda (: +) nie było możliwe, można również zrobić

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

Jasne, że to przesada w tym scenariuszu, ale jeśli plus_1 był naprawdę długi wyraz, możesz go umieścić na oddzielnej linii od tworzenie tablicy.

0

Możesz to zrobić po prostu z notacją %w w tablicach ruby.

array = %w(1 2 3) 

Doda tablicę wartości 1,2,3 do druku arrayand zewnątrz wyjścia jak ["1", "2", "3"]

2

Można zrobić

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

jak inni to zauważyli, można również zainicjować tablicą% wag zapisu tak:

array = %w(1 2 3) 

lub

array = %w[1 2 3] 

Należy pamiętać, że w obu przypadkach każdy element jest ciągiem, a nie liczbą całkowitą. Więc jeśli chcesz tablicę, której elementami są liczbami całkowitymi, nie należy owinąć każdy element z apostrofami:

array_of_integers = [1, 2, 3] 

Ponadto, nie trzeba postawić przecinek między elementami (co jest konieczne przy tworzeniu tablicę bez tego% w zapisie). Jeśli zrobisz to (co często robił przez pomyłkę), na przykład:

wrong_array = %w(1, 2, 3) 

jego elementy będą trzy ciągi ---- "1", "2", "3". Więc jeśli zrobić:

puts wrong_array 

wyjście będzie:

1, 
2, 
3 
=>nil 

który nie jest to, co chcemy tutaj.

Mam nadzieję, że pomoże to wyjaśnić sprawę!

Powiązane problemy