přejít na obsah přejít na navigaci

Linux E X P R E S, Naučte se Ruby 7 - Pole

Naučte se Ruby 7 - Pole

ruby.jpg

Dnešní téma zní jednoduše - budeme se zabývat polem a ničím jiným. Co se ovšem pod pojmem "pole" vlastně rozumí, jak se s ním pracuje a jaké jsou jeho výhody? Pojďme se do toho pustit.


Pole si můžete představit jako řadu prvků spojených dohromady. Tyto prvky jsou uvozeny znakem hranaté závorky a odděleny čárkou. Polem je např.:

[]
[5]
['Ahoj', 'Na shledanou']

promenna = 'text'   # toto není pole, ale proměnná
[89.9, promenna, [true, false]]

První pole je prázdné, druhé obsahuje číslici 5, třetí pole obsahuje dva textové řetězce a konečně poslední pole obsahuje číslo, hodnotu proměnné promenna a posledním prvkem pole je pole obsahující pravdivostní hodnoty true a false.

Vzpomínáte na prázdný textový řetězec ('') ? Tak proč bychom nemohli mít prázdné pole ([]), že?

Pojďme se nyní podívat, jak se s jednotlivými prvky pole vlastně pracuje.

jmena = ['Martin', 'Honza', 'Alena']

puts jmena
puts
puts jmena[0]
puts jmena[1]
puts jmena[2]
puts jmena[3]

zobrazí

Martin
Honza
Alena

Martin
Honza
Alena
nil

K jednotlivým prvkům pole se tedy přistupuje prostřednictvím čísla (pozice) v poli. Jen je důležité pamatovat na to, že se jednotlivé prvky pole číslují od 0 a zároveň nás hodnota nil informuje o tom, že se v poli již žádný další prvek nenachází (v našem případě, že prvek pole s pořadovým číslem 3 neexistuje).

Hodnota nil je speciální objekt a znamená konec pole.

Metoda each

Metoda each vám umožní provést něco (cokoliv chcete) s každým prvkem pole. Zkusme následující příklad.

jazyky = ['čeština', 'angličtina', 'němčina']

jazyky.each do |jazyk|
   puts 'Můj nejoblíbenější jazyk je ' + jazyk + '!'
   puts 'Máte ho také rádi?'
end

zobrazí

Můj nejoblíbenější jazyk je čeština!
Máte ho také rádi?
Můj nejoblíbenější jazyk je angličtina!
Máte ho také rádi?
Můj nejoblíbenější jazyk je němčina!
Máte ho také rádi?

Je vidět, že se každá z hodnot pole jazyky v cyklu postupně dosadí do proměnné jazyk, kterou pak dál používáme pro výpis daného jazyka.

Podobně vypadá následující konstrukce, která nám umožní zopakovat nějaký kus kódu xkrát. Pozor, přitom se ale nejedná o pole, ale pouze metodu (objektu) celého čísla:

3.times do
  puts 'Mám tě rád.'
end

zobrazí

Mám tě rád.
Mám tě rád.
Mám tě rád.

Pokročilá práce s polem

Podívejme se nyní na další metody, které nám usnadní provádění většiny běžných operací, které někdy můžeme chtít s polem provést.

Metody join a to_s

potraviny = ['mléko', 'maso', 'pivo']

puts potraviny
puts
puts potraviny.to_s
puts
puts potraviny.join(', ')
puts
puts potraviny.join('  :)  ') + '  8)'

200.times do
  puts []
end

zobrazí

mléko
maso
pivo

mlékomasopivo

mléko, maso, pivo

mléko  :)  maso  :)  pivo  8)

Několik poznámek k předchozímu programu

  • puts potraviny vytiskne položky pole potraviny pod sebe
  • puts potraviny.to_s spojí položky pole dohromady, tedy je napíše jako jedno slovo
  • puts potraviny.join(', ') přidá ke každé položce pole text uvedený v závorce
  • puts potraviny.join(' :) ') + ' 8)' si můžete pro snadnější pochopení představit jako řetězec puts potraviny.join(' :) ') PLUS řetězec ' 8)'
  • konečně poslední cyklus neprovede nic, přesněji řečeno 200krát vypíše prázdné pole, tedy nevypíše nic

Metody push, pop, last, length

Zkusme tento příklad

oblibene = []

oblibene.push 'víno a brambůrky'
oblibene.push 'stránky Microsoftu'

puts oblibene[0]
puts oblibene.last
puts oblibene.length

puts oblibene.pop
puts oblibene
puts oblibene.length

zobrazí

víno a brambůrky
stránky Microsoftu
2
stránky Microsoftu
víno a brambůrky
1

a nyní vysvětlení

  • metoda push přidává do pole další položky, položky jsou přidávány postupně, jak přijdou, nová položka je přidána na konec pole
  • metoda last zobrazí poslední položku v poli
  • metoda length nám řekne, kolik prvků pole obsahuje (pozor, index posledního prvku v poli je o jedničku menší!)
  • metoda pop pak vrací položku z konce pole a zároveň ji z pole odebere

Pamatujte, že metody push a pop mění obsah pole. Metoda push prvky do pole přidává a metoda pop je odebírá!

Příklady 7

  • Napište program, který od nás bude na vstupu čekat neomezené množství slov (jedno slovo na řádek). Jakmile pak stisknete klávesu [Enter] na prázdném řádku, ukončí vstup slov a vypíše námi napsaná slova opačně, tzn. od posledního slova po první slovo, které jsme zadali.
  • Upravte předchozí příklad tak, že zadaná slova setřídíte, použijte metodu sort. Její syntaxe je snadná - pole.sort vrátí setříděný seznam prvků pole.
  • Přepište program, ve kterém jste vytvářeli obsah nějaké knihy. Jednotlivé kapitoly uchovejte jako prvky pole.
  • Napište program, který vytvoří pole 20 náhodných dvouciferných čísel. Zajistěte, aby se čísla uvedená v poli neopakovala!

Příště se podíváme na psaní vlastních metod. Jak sami uvidíte, usnadníme si tím psaní delších programů a zároveň zpřehledníme vlastní kód programu.

Nahoru

Příspěvky

Nil neznamená konec pole!
Pátek 10. 12. 2008, 14:29:23
Odpovědět  Odkaz 
"Hodnota nil je speciální objekt a znamená konec pole."

Nil sice je speciální objekt, ale neznamená konec pole, ale "nic" (tedy i konec pole, ale nil vrací třeba i gets, když je na konci souboru, apod.)

Vemte si třeba takovéto pole = [3, 4, nil, 5, 7]. Kdyby nil byl konec pole, tak pole[š] už by byl konec pole, což ale není, i když pole[2] opravdu vrátí nil.
Martin Šín Re:Nil neznamená konec pole!
Martin Šín 10. 12. 2008, 15:14:48
Odpovědět  Odkaz 
Váš příklad i poznámka je v pořádku a i když mi nezbývá než souhlasit, budu si dál trvat na svém. :-) Při zjišťování velikosti pole sice můžu použít length, které mi jeho délku vrátí, ale pokud bych ho zkoumal nějakým cyklem, pak budu zcela korektně předpokládat, že jakmile narazím na hodnotu nil, jsem na konci pole. Vložení nil doprostřed pole jsem ještě neviděl (ani by mě nenapadlo tohle provést), ale to bude tím, že nejsem programátor. :-)

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Martin Šín

Martin Šín

Martin Šín (*1980) vystudoval pedagogickou fakultu a nyní pracuje jako učitel matematiky a výpočetní techniky na střední škole. Ve volném čase překládá a také hraje hry (ani jedno mu příliš nejde). V práci se snaží prosazovat open-source programy.


  • Distribuce: Debian

| proč linux



Public Relations

OpenRadioss: Simulace dynamických dějů nyní jako open-source

OpenRadiossNa podzim loňského roku Altair překvapil odbornou veřejnost z řad výpočtářů a vývojových inženýrů představením řešiče OpenRadioss. Jak už název napovídá, Open­Radi­oss je open-source verzí explicitní­ho solveru Altair Radioss, CAE nástroje pro simulace rychlých dějů, jakými jsou tolik populární virtuální testy nárazů vozidel, včetně vyhodnocení pasivní bezpečnosti, zkoušky odolnosti leteckých konstrukcí, pádové zkoušky elektronických zařízení a podobně.

Pokračování ...



Public Relations

Zabezpečte firemní komunikaci a chraňte citlivé informace vaší společnosti pomocí MailStore

Stále více malých a středních podniků (MSP) přechází na Microsoft 365 v cloudu. Očekávají přitom, že jejich data jsou zde automaticky v bezpečí. Jenže tak tomu není. Přestože cloudové služby nabízejí vysokou úroveň zabezpečení, nejsou data v Microsoft 365 archivována a zálohována automaticky.

Pokračování ...


Redakční blog

Pavel Fric

Pavel Fric, 10. April

Zapojte se do tvorby distribuce Mageia

Podílejte se na vytváření balíčků pro Mageiu, dělejte, co je potřeba, staňte se baličem


Pavel Fric

Pavel Fric, 13. March

Lollypop

Lollypop je hudební přehrávač navržený, jak ukazuje jeho podoba, aby výborně zapadl do pracovního...


Pavel Fric

Pavel Fric, 26. February

QElectroTech

Kreslení elektrotechnických i jiných výkresů


Všechny blogy »