2011-06-24 12 views
13

Próbuję dowiedzieć się, co robi funkcja insert w Ruby.Jak działa .insert?

Konsultowałem się z Google i ruby-doc.com, ale wyjaśnienie to nie wystarcza, aby opisać tę (pozornie) tajemniczą funkcję.

Oto co mi mylące:

a = %w{a b c d} 
puts a.insert(4, 5) output = a,b,c,d,5 

pierwsze pytanie jest, dlaczego jest 4 nie włożona?

puts a.insert(2,2,6) 

Wyjście jest:

a 
b 
2 
6 
c 
d 

dwa pytania podniesione przez to są

  1. Dlaczego 2 nie dodaje dwa razy?
  2. Dlaczego 2 i 6 (pozornie) są arbitralnie umieszczane między literami b i c?

Odpowiedz

36

Nie jestem pewien, czym jest zamieszanie. Z Dokumenty Ruby

ary.insert(index, obj...) -> ary 

wstawia podane wartości przed elementem z danego wskaźnika (który może być ujemne).

a = %w{ a b c d } 
a.insert(2, 99)   #=> ["a", "b", 99, "c", "d"] 
a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"] 

Więc a.insert(2, 99) jest wstawianie 99 do tablicy tuż przed tablicą offsetowego 2. Pamiętaj, że indeks tablicy zaczyna się od 0, więc to jest trzeci gniazdo w tablicy.

Drugi przykład to wstawianie tablicy [1,2,3] do drugiego z ostatniego slotu tablicy, ponieważ ujemne przesunięcia liczą się od końca tablicy. -1 jest ostatnim indeksem, -2 jest drugim ostatnim.

Docs Array powiedzieć to dobrze:

Array indeksowanie rozpoczyna się od 0, podobnie jak w C lub Java. Przyjmuje się, że ujemny indeks odnosi się do końca tablicy --- to znaczy, że indeks -1 wskazuje ostatni element tablicy, -2 jest następnym ostatnim elementem w tablicy, i tak dalej .

To są BARDZO ważne pojęcia do nauki w programowaniu w ogóle, nie tylko w Ruby.

5

Wygląda na to, że pierwszym parametrem jest indeks do wstawienia, a reszta to elementy do wstawienia.

docs wydaje się potwierdzać to, wymieniając funkcję jak ary.insert(index, obj...) → ary

Jeśli chcesz po prostu dodać kilka wartości do końca tablicy (nie wiem składni Ruby, ale powinno to być poprawne) I pomyśl, że na przykład chcesz zadzwonić pod numer a.insert(a.length, 4, 5) lub a.insert(a.length, 2, 2, 6).

+0

Dziękuję. Zrobi to. – Bodhidarma

+3

Jeśli chcesz po prostu dodać pewne wartości na końcu tablicy, użyj metody ['Array # push'] (http://www.ruby-doc.org/core/classes/Array.html#M000226). –