Tablice

edytuj

Możesz stworzyć tablicę przez podanie kilku jej elementów wewnątrz nawiasów kwadratowych ([]) oddzielonych przecinkami. W Rubim tablice mogą przyjmować obiekty różniące się typami.

 tab = [1, 2, "3"]
=> [1, 2, "3"]

Tablice mogą być konkatenowane i powtarzane tak jak łańcuchy.

 tab + ["pla", "bla"]
=> [1, 2, "3", "pla", "bla"]
 tab * 2
=> [1, 2, "3", 1, 2, "3"]

Możemy używać numerów indeksów aby odnieść się do jakiejkolwiek części tablicy.

irb(main):004:0> tab[0]
=> 1
irb(main):005:0> tab[0,2]
=> [1, "3"]
irb(main):006:0> tab[0..1]
=> [1, 2]
irb(main):007:0> tab[-2]
=> 2
irb(main):008:0> tab[-2..-1]
=> [2, "3"]
irb(main):009:0> tab[-2,2]
=> [2, "3"]

(Wartości ujemne oznaczają położenie elementu od końca tablicy.)

Tablice mogą być konwertowane na łańcuchy tekstowe i odwrotnie poprzez użycie odpowiednio: join (dołącz) i split (podziel):

irb(main):010:0> tekst = tab.join(":")
=> "1:2:3"
irb(main):011:0> tekst.split(":")
=> ["1", "2", "3"]

Wreszcie, aby dodać nowy element do tablicy (tablice w Rubim zachowują się jak listy) można zastosować operator <<:

irb(main):006:0> tab << 4
=> [1, 2, "3", 4]
irb(main):007:0> tab << "bla"
=> [1, 2, "3", 4, "bla"]

Tablice wielowymiarowe

edytuj

W języku Ruby można także definiować tablice tablic, przez co można niejako "emulować" ich wielowymiarowość. Spójrzmy na następujący fragment kodu:

 t = [[1,2],[3,4]]
=> [[1, 2], [3, 4]]
 t[1][0]
=> 3

Jako wynik na ekranie pojawia się cyfra 3 (pierwszy element drugiej tablicy "wewnętrznej").

Tablice asocjacyjne

edytuj

Tablica asocjacyjna ma elementy, które są dostępne przez klucze mogące mieć wartość dowolnego rodzaju, a nie przez kolejne numery indeksów. Taka tablica jest czasem nazywana hash'em lub słownikiem; w świecie Rubiego preferujemy termin hash. Hash (czyt. hasz) może być utworzony przez pary "klucz => wartość" umieszczone w nawiasach klamrowych ({}). Klucza używa się by odnaleźć coś w haszu, tak jak używa się indeksu by odnaleźć coś w tablicy.

irb(main):014:0> h = {1 => 2, "2" => "4"}
=> {1=>2, "2"=>"4"}
irb(main):015:0> h[1]
=> 2
irb(main):016:0> h["2"]
=> "4"
irb(main):017:0> h[5]
=> nil

Dodawanie nowego wpisu:

irb(main):018:0> h[5] = 10
=> 10
irb(main):019:0> h
=> {5=>10, 1=>2, "2"=>"4"}

Kasowanie wpisu przez podanie klucza:

irb(main):020:0> h.delete 1
=> 2
irb(main):021:0> h[1]
=> nil
irb(main):022:0> h
=> {5=>10, "2"=>"4"}
irb(main):023:0>

Unia, różnica i część wspólna

edytuj

Mając dwie tablice:

tab1 = [1, 2, 3, 4]
tab2 = [1, 2, 5, 6]

Aby uzyskać unię, należy użyć polecenia:

tab1 | tab2
=> [1, 2, 3, 4, 5, 6]

Aby uzyskać część wspólną:

tab1 & tab2
=> [1, 2]

Aby uzyskać różnicę:

tab1 - tab2
=> [3, 4]