Ruby/Tablice
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]