LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (10) - Pole

V dnešním díle si přiblížíme další z datových struktur a to pole.

21.12.2004 15:00 | Josef "jose" Kadlec | Články autora | přečteno 8005×

Pole je jedna z tzv. seznamová struktura, kam patří společně se strukturou hash. Pole je tedy seznam skalárních dat, které jsou seřazené od prvního do posledního prvku. Jak už jsem zmínil v některém z minulých dílů, pole poznáme tak, že jeho názvu předchází znak "@". Pro název samozřejmě platí skoro všechna pravidla tvorby názvů proměnných - tzn. že se rozlišují velká a malá písmena, maximální délka názvu je 255 znaků, ale je tu jeden rozdíl! Názvy polí mohou totiž mohou začínat číslicí. Platí pak také samozřejmě, že názvy polí a jiných proměnných mezi sebou nekolidují. K prvkům pole se přistupuje pomocí indexů prvků pole, což souvisí právě s tím, že pole jsou řazená.

A nyní se podíváme na to, jak mohou taková pole vypadat a jak se tvoří. Nejprve si vytvoříme prázdné pole:

@pole = ();

Teď si vytvoříme jednoduchá pole se skalárními daty:

@pole = (1, 2, 3, 4, 5); #pole s cisly
@pole = ('Pepa', 'Karel', 'Vojta'); #pole retezcu
@pole = (1, 'Pepa', 5+1, $var); #smisene pole

K jednoduššímu zápisu pole lze použít i příkazu qw a to takto:

@pole = qw(

	Po Ut St Ct
	Pa So Ne
);

Vidíme, že si vůbec nemusíme dávat práci s psaním oddělovacího znaku čárka a uvozovek.

Pole lze i vnořovat do sebe - tzn. pokud některými (nebo všemi) prvky pole jsou další pole. Ovšem nemusí to mít logický význam pro programátora, protože tato pole se sloučí do jednoho.

K prvkům pole se přistupuje pomocí indexu, který určuje pozici elementu v poli, přičemž pole jsou indexována od nuly. Takže když budu chtít například uložit řetězec "Vojta" do prvního prvku pole, udělám to takto:

$pole[0] = "Vojta";

Všimněme si, že tato proměnná nemá před názvem znak "@", ale přesto nemá s proměnnou $pole nic společného.

Pole je dynamické jako všechny proměnné v Perlu, takže nemusíte, jako například v programovacím jazyce C, určovat délku pole v deklaraci. Takže když máte například pole o pěti prvcích (tzn. do prvku s indexem 4, protože se indexuje od 0) a chcete přidat další prvek, tak to uděláte prostě takto:

$pole[5] = "dalsi sesty prvek pole";

Pokud se budeme snažit přidat prvek, který nenásleduje za poslední definovaný prvek a přidali by jste prvek v našem poli o šesti prvcích například na desátou pozici, tak budou chybějící prvky mezi těmito prvky vyplněný nedefinovými hodnotami. Hodnoty indexů mohou mít i zápornou hodnotu. Takové indexy se pak počítají od konce pole, takže například prvek s indexem -1 je poslední prvek.

Pokud chceme procházet pole v cyklu, tak je nejjednodušší a nejefektivnější použít cyklus foreach, jak už jsme si popsali v díle o cyklech. Pokud ale potřebujete použít pro zpracování pole cyklus while či for, tak potřebujete i znát index posledního prvku pole, abyste věděli, kdy má cyklus skončit. Index posledního prvku pole je uložen v proměnné $#pole. Skutečná délka pole - tzn. počet prvků v poli je uložená přímo v proměnné @pole. Takže když budete chtít uložit délku pole @pole do proměnné $delka_pole, tak to uděláte takto:

$delka_pole = @pole;

Je ovšem potřeba si dávat pozor na kontext, podle kterého data přiřazujeme.

Co když budete potřebovat vytvořit pole s posloupností čísel od 1 do 100. Asi těžko vypíšete každý prvek zvlášť. Můžete použít buď cyklu a nebo elegantnější zápisu:

@pole = (1 .. 100);

Funguje to i se znaky, takže znaky od "e" do "k" v abecedě vypíšete takto:

@pole = ('e' .. 'k');

Nad výpisem pole například na standardní výstup asi nemusíte přemýšlet a použijete prostě cyklus for s přístupem k prvkům přes indexy nebo cyklus foreach, ale existuje jedna elegantnější cesta, jak vytisknout pole (nebo zpracovávat jeho prvky).

print "@pole\n";

Všimněme si, že proměnná pole je v uvozovkách. Tento příkaz vypíše všechny prvky pole a to každý na jeden řádek.

Nyní si představíme funkce, které se typicky používají pro práci s poli. Pokud budeme chtít do pole přidat prvek (z pravé strany), tak bychom mohli použít něco podobného jako:

@pole = (@pole, $novy_element);

Zde je důležizé si dávat pozor na kontext přiřazení (viz. níže). K přidání dalšího prvku z pravé strany pole lze použít i funkci push takto:

push(@pole, $novy_element);

Touto funkcí je možné přiřazovat i více prvků najednou a to takto:

@pole = (1,2,3);
push(@pole,4,5,6);

Tímto jsme vytvořili pole o šesti prvcích, které představují posloupnost čísel od 1 do 6. Další užitečnou funkcí je funkce pop, která naopak prvky z pole odebírá (zase důležité upozornit, že z pravé strany pole - neboli od konce). Takže použití může vypadat takto:

$posledni_element = pop(@pole);

Poslední prvek z pole @pole se odebere a uloží do proměnné $posledni_element. Další funkce unshift a shift dělají obdobnou operaci, s tím rozdílem, že z levé strany pole - čili ze začátku pole. Příklad použití:

unshift(@fred, $novy_prvek); #prida prvek $a na zacatek pole
unshift(@fred, 1, 2, 3); #prida prvky 1, 2, 3 na zacatek pole
$posledni_prvek = shift(@pole); #odstrani prvni prvek z pole a ulozi ho do promenne $posledni_prvek

Další užitečnou funkcí je funkce reverse, která vrátí pole s obráceným pořadím prvků. Použití je prosté:

@pole = (1, 2, 3);
@pole = reverse(@pole); #pole nyni obsahuje prvky (3, 2, 1)

Mezi další funkce, které lze použít přímo s poli patří například funce sort, která vám seřadí prvky v poli od nejmenšího po největší (popř. u řetězců podle abecedy) a nebo například funkce chomp, která odstraní z konce každého prvku znaky nové řádky.

Nakonec si něco řekneme o kontextu přiřazení. Nejdříve se podíváme na pár příkladů přířazení, abychom viděli, jak se chovají:

($a, $b, $c) = (1, 2, 3); #priradi jednotlive prvky do jednotlivych prvku pole
($x, @pole) = ($a, $b, $c); #$a priradi do $x a $b, $c do @pole
($x, @pole) = @pole; #do $x priradi prvni prvek z @pole a @pole bude bez tohoto prvku

Co když ale zapíši takovéto dva zápisy:

$x = @pole;
($x) = @pole;

V prvním případě bude do proměnné $x uložen počet prvků pole. Zatímco v druhém případě bude do $x uložen první prvek pole. Proto je potřeba si dávat na kontext, ve kterém se chceme pohybovat.

V přístím díle se popereme s hashi.

Verze pro tisk

pridej.cz

 

DISKUZE

print "@pole" se chová trochu jinak 29.12.2004 15:26 Roman Vašíček




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

15.1.2018 0:51 /František Kučera

První letošní pražský sraz se koná již tento čtvrtek 18. ledna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Vítáni jsou všichni příznivci svobodného softwaru a hardwaru, ESP32, DIY, CNC, SDR nebo dobrého piva. Prvních deset účastníků srazu obdrží samolepku There Is No Cloud… just other people's computers. od Free Software Foundation.


Přidat komentář

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze