SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
Курс по програмиранеКурс по програмиране
на Perlна Perl
ХешовеХешове
I-can.eu
Автор: Красимир Беров, Превод: Теодора Берова
ХешовеХешове
СъдържаниеСъдържание
1.1. Какво е хеш?Какво е хеш?
2.2. Представяне на хешПредставяне на хеш
3.3. Работа с елементите на хеша (exists,Работа с елементите на хеша (exists,
delete, defined)delete, defined)
4.4. Други функции за работа с хешовеДруги функции за работа с хешове
Какво е хеш?Какво е хеш?
• Хешът представлява набор от двойкиХешът представлява набор от двойки
ключ/стойностключ/стойност
• Ключовете в един хеш не са предварителноКлючовете в един хеш не са предварително
декларирани. Ако ключът не съществува подекларирани. Ако ключът не съществува по
време на ПРИСВОЯВАНЕТО, то той се създава ивреме на ПРИСВОЯВАНЕТО, то той се създава и
приема присвоената стойност.приема присвоената стойност.
• Името на променливата хеш се състои от знака заИмето на променливата хеш се състои от знака за
процент (%), следван от буква, след това нулапроцент (%), следван от буква, след това нула
или повече букви, цифри и долни черти.или повече букви, цифри и долни черти.
my %fruit_colors = (my %fruit_colors = (
apple => "red",apple => "red",
banana => "yellow",banana => "yellow",
););
Представяне на хешПредставяне на хеш
• Не съществува литерално представяне на един хеш,Не съществува литерално представяне на един хеш,
вместо това хешът се представя като списък.вместо това хешът се представя като списък.
• Всяка двойка елементи в списъка дефинира ключ иВсяка двойка елементи в списъка дефинира ключ и
съответната му стойност. Това представяне може дасъответната му стойност. Това представяне може да
бъде присвоено на променлива от типбъде присвоено на променлива от тип хеш , коятохеш , която
след това ще пресъздаде същия хеш.след това ще пресъздаде същия хеш.
Пример:Пример:
use Data::Dumper; $ =$/;use Data::Dumper; $ =$/;
mymy %fruit_colors%fruit_colors == ('apple', 'red', 'banana', 'yellow')('apple', 'red', 'banana', 'yellow');;
print Dumper(%fruit_colors);print Dumper(%fruit_colors);
my @fruit_colors = %fruit_colors;my @fruit_colors = %fruit_colors;
print Dumper(@fruit_colors);print Dumper(@fruit_colors);
%fruit_colors = @fruit_colors;%fruit_colors = @fruit_colors;
$fruit_colors{pear} = 'yellow';#add a key/value pair$fruit_colors{pear} = 'yellow';#add a key/value pair
print Dumper(%fruit_colors);print Dumper(%fruit_colors);
Работа с елементите на хешаРабота с елементите на хеша
• existsexists
• defineddefined
• deletedelete
Работа с елементите на хешаРабота с елементите на хеша
• exists EXPRexists EXPR
В израз, който указва елемент от хеш или масив,В израз, който указва елемент от хеш или масив,
връща истина, ако посоченият елемент някога евръща истина, ако посоченият елемент някога е
бил инициализиран, дори ако съответнатабил инициализиран, дори ако съответната
стойност е недефинирана.стойност е недефинирана.
Елементът не се създава автоматично, в случайЕлементът не се създава автоматично, в случай
че не съществува.че не съществува.
my %f_colors = ('apple', 'red', 'banana', 'yellow');my %f_colors = ('apple', 'red', 'banana', 'yellow');
my @f_colors = %f_colors;my @f_colors = %f_colors;
exists $f_colors[0] andexists $f_colors[0] and
print $f_colors[0] .' exists';print $f_colors[0] .' exists';
exists $f_colors{'apple'} andexists $f_colors{'apple'} and
print ' and is '.$f_colors{'apple'};print ' and is '.$f_colors{'apple'};
print 'Ops... 'print 'Ops... '
.$f_colors[0].' is '.$f_colors{$f_colors[0]};.$f_colors[0].' is '.$f_colors{$f_colors[0]};
Работа с елементите на хешаРабота с елементите на хеша
• defined EXPRdefined EXPR
• Връща Булева стойност, указваща дали EXPR имаВръща Булева стойност, указваща дали EXPR има
стойност, различна от недефинираната стойностстойност, различна от недефинираната стойност
undefundef......
• Когато обработва елемент от хеш, указва далиКогато обработва елемент от хеш, указва дали
стойността е дефинирана, а не дали този ключ е встойността е дефинирана, а не дали този ключ е в
хеша. За да разберете дали ключа съществувахеша. За да разберете дали ключа съществува
ползвайтеползвайте exists.exists.
my %f_colors = ('apple', 'red', 'banana', 'yellow');my %f_colors = ('apple', 'red', 'banana', 'yellow');
my @f_colors = %f_colors;my @f_colors = %f_colors;
defined $f_colors[0] anddefined $f_colors[0] and
print $f_colors[0] .' defined';print $f_colors[0] .' defined';
defined $f_colors{'apple'} anddefined $f_colors{'apple'} and
print ' and is '.$f_colors{'apple'};print ' and is '.$f_colors{'apple'};
#...#...
Работа с елементите на хешаРабота с елементите на хеша
• delete EXPRdelete EXPR
• В израз, който определя елемент или отрязък отВ израз, който определя елемент или отрязък от
хеш или масив, изтрива посочения елемент (илихеш или масив, изтрива посочения елемент (или
елементи) от хеша или масива...елементи) от хеша или масива...
• Връща списък със същия брой елементи, коитоВръща списък със същия брой елементи, които
са били премахнати. Всеки елемент от тозиса били премахнати. Всеки елемент от този
списък представлява или стойността на изтритиясписък представлява или стойността на изтрития
елемент, или недефинирана стойност.елемент, или недефинирана стойност.
• В скаларен контекст, връща стойността наВ скаларен контекст, връща стойността на
последния изтрит елемент (или недефиниранатапоследния изтрит елемент (или недефинираната
стойност, ако този елемент не съществува).стойност, ако този елемент не съществува).
Виж: perlfunc/deleteВиж: perlfunc/delete
Работа с елементите на хешаРабота с елементите на хеша
• delete (Пример)delete (Пример)
my %f_colors = ('apple', 'red', 'banana', 'yellow');my %f_colors = ('apple', 'red', 'banana', 'yellow');
my @f_colors = %f_colors;my @f_colors = %f_colors;
push @f_colors,('pear','yellow');push @f_colors,('pear','yellow');
%f_colors = @f_colors;%f_colors = @f_colors;
print Dumper @f_colors;print Dumper @f_colors;
print Dumper %f_colors;print Dumper %f_colors;
print delete $f_colors[-1];print delete $f_colors[-1];
print delete @f_colors{qw(apple banana)};print delete @f_colors{qw(apple banana)};
print 'after delete:';print 'after delete:';
print Dumper %f_colors;print Dumper %f_colors;
print Dumper @f_colors;print Dumper @f_colors;
Други функции за работаДруги функции за работа
с хешс хеш
• eacheach
• keyskeys
• valuesvalues
Други функции за хешДруги функции за хеш
• each HASHeach HASH
• Когато е извикан в списъчен контекст, връщаКогато е извикан в списъчен контекст, връща
двуелементен списък, състоящ се от ключ и стойностдвуелементен списък, състоящ се от ключ и стойност
на следващия елемент от хеша, така че можете да гона следващия елемент от хеша, така че можете да го
обхождате (итерация).обхождате (итерация).
• Когато е извикан в скаларен контекст, връща самоКогато е извикан в скаларен контекст, връща само
ключа на следващия елемент от хеша.ключа на следващия елемент от хеша.
• Записите се връщат в привидно произволен ред.Записите се връщат в привидно произволен ред.
• Но този произволен ред е в действителност същиятНо този произволен ред е в действителност същият
ред, какъвто функциятаред, какъвто функцията keyskeys илиили valuesvalues бихабиха
направили в същия този (немодифициран) хеш.направили в същия този (немодифициран) хеш.
while (($key,$value) = each %ENV) {while (($key,$value) = each %ENV) {
print "$key=>$valuen";print "$key=>$valuen";
}}
Други функции за хешДруги функции за хеш
• keys HASHkeys HASH
Връща списък, който се състои отВръща списък, който се състои от
всички ключове на съответния хеш. (Ввсички ключове на съответния хеш. (В
скаларен контекст, връща броя наскаларен контекст, връща броя на
ключовете.)ключовете.)
#sorted by key#sorted by key
foreach $key (sort(keys %ENV)) {foreach $key (sort(keys %ENV)) {
print $key, ' => ', $ENV{$key}, "n";print $key, ' => ', $ENV{$key}, "n";
}}
Други функции за хешДруги функции за хеш
• values HASHvalues HASH
• Връща списък, който се състои от всичкиВръща списък, който се състои от всички
стойности на съответния хеш. (В скаларенстойности на съответния хеш. (В скаларен
контекст, връща броя на стойностите.)контекст, връща броя на стойностите.)
• Има само един итератор (шаблон) за всекиИма само един итератор (шаблон) за всеки
хеш, който се ползва при всяко извикване нахеш, който се ползва при всяко извикване на
eacheach,, keyskeys ии valuesvalues, програмата, програмата..
#sorted by value#sorted by value
foreach my $value (sort(values %ENV)) {foreach my $value (sort(values %ENV)) {
print $value, "n";print $value, "n";
}}
ХешовеХешове
Въпроси?Въпроси?
УпражненияУпражнения

Contenu connexe

En vedette (7)

Syntax
SyntaxSyntax
Syntax
 
Working with text, Regular expressions
Working with text, Regular expressionsWorking with text, Regular expressions
Working with text, Regular expressions
 
Mojolicious. Веб в коробке!
Mojolicious. Веб в коробке!Mojolicious. Веб в коробке!
Mojolicious. Веб в коробке!
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Perl File Handling and Regex
Perl File Handling and RegexPerl File Handling and Regex
Perl File Handling and Regex
 
System Programming and Administration
System Programming and AdministrationSystem Programming and Administration
System Programming and Administration
 
Mastering Regex in Perl
Mastering Regex in PerlMastering Regex in Perl
Mastering Regex in Perl
 

Plus de Krasimir Berov (Красимир Беров) (8)

Network programming
Network programmingNetwork programming
Network programming
 
Processes and threads
Processes and threadsProcesses and threads
Processes and threads
 
Working with databases
Working with databasesWorking with databases
Working with databases
 
Subroutines
SubroutinesSubroutines
Subroutines
 
IO Streams, Files and Directories
IO Streams, Files and DirectoriesIO Streams, Files and Directories
IO Streams, Files and Directories
 
Hashes
HashesHashes
Hashes
 
Lists and arrays
Lists and arraysLists and arrays
Lists and arrays
 
Scalar data types
Scalar data typesScalar data types
Scalar data types
 

Хешове

  • 1. Курс по програмиранеКурс по програмиране на Perlна Perl ХешовеХешове I-can.eu Автор: Красимир Беров, Превод: Теодора Берова
  • 3. СъдържаниеСъдържание 1.1. Какво е хеш?Какво е хеш? 2.2. Представяне на хешПредставяне на хеш 3.3. Работа с елементите на хеша (exists,Работа с елементите на хеша (exists, delete, defined)delete, defined) 4.4. Други функции за работа с хешовеДруги функции за работа с хешове
  • 4. Какво е хеш?Какво е хеш? • Хешът представлява набор от двойкиХешът представлява набор от двойки ключ/стойностключ/стойност • Ключовете в един хеш не са предварителноКлючовете в един хеш не са предварително декларирани. Ако ключът не съществува подекларирани. Ако ключът не съществува по време на ПРИСВОЯВАНЕТО, то той се създава ивреме на ПРИСВОЯВАНЕТО, то той се създава и приема присвоената стойност.приема присвоената стойност. • Името на променливата хеш се състои от знака заИмето на променливата хеш се състои от знака за процент (%), следван от буква, след това нулапроцент (%), следван от буква, след това нула или повече букви, цифри и долни черти.или повече букви, цифри и долни черти. my %fruit_colors = (my %fruit_colors = ( apple => "red",apple => "red", banana => "yellow",banana => "yellow", ););
  • 5. Представяне на хешПредставяне на хеш • Не съществува литерално представяне на един хеш,Не съществува литерално представяне на един хеш, вместо това хешът се представя като списък.вместо това хешът се представя като списък. • Всяка двойка елементи в списъка дефинира ключ иВсяка двойка елементи в списъка дефинира ключ и съответната му стойност. Това представяне може дасъответната му стойност. Това представяне може да бъде присвоено на променлива от типбъде присвоено на променлива от тип хеш , коятохеш , която след това ще пресъздаде същия хеш.след това ще пресъздаде същия хеш. Пример:Пример: use Data::Dumper; $ =$/;use Data::Dumper; $ =$/; mymy %fruit_colors%fruit_colors == ('apple', 'red', 'banana', 'yellow')('apple', 'red', 'banana', 'yellow');; print Dumper(%fruit_colors);print Dumper(%fruit_colors); my @fruit_colors = %fruit_colors;my @fruit_colors = %fruit_colors; print Dumper(@fruit_colors);print Dumper(@fruit_colors); %fruit_colors = @fruit_colors;%fruit_colors = @fruit_colors; $fruit_colors{pear} = 'yellow';#add a key/value pair$fruit_colors{pear} = 'yellow';#add a key/value pair print Dumper(%fruit_colors);print Dumper(%fruit_colors);
  • 6. Работа с елементите на хешаРабота с елементите на хеша • existsexists • defineddefined • deletedelete
  • 7. Работа с елементите на хешаРабота с елементите на хеша • exists EXPRexists EXPR В израз, който указва елемент от хеш или масив,В израз, който указва елемент от хеш или масив, връща истина, ако посоченият елемент някога евръща истина, ако посоченият елемент някога е бил инициализиран, дори ако съответнатабил инициализиран, дори ако съответната стойност е недефинирана.стойност е недефинирана. Елементът не се създава автоматично, в случайЕлементът не се създава автоматично, в случай че не съществува.че не съществува. my %f_colors = ('apple', 'red', 'banana', 'yellow');my %f_colors = ('apple', 'red', 'banana', 'yellow'); my @f_colors = %f_colors;my @f_colors = %f_colors; exists $f_colors[0] andexists $f_colors[0] and print $f_colors[0] .' exists';print $f_colors[0] .' exists'; exists $f_colors{'apple'} andexists $f_colors{'apple'} and print ' and is '.$f_colors{'apple'};print ' and is '.$f_colors{'apple'}; print 'Ops... 'print 'Ops... ' .$f_colors[0].' is '.$f_colors{$f_colors[0]};.$f_colors[0].' is '.$f_colors{$f_colors[0]};
  • 8. Работа с елементите на хешаРабота с елементите на хеша • defined EXPRdefined EXPR • Връща Булева стойност, указваща дали EXPR имаВръща Булева стойност, указваща дали EXPR има стойност, различна от недефинираната стойностстойност, различна от недефинираната стойност undefundef...... • Когато обработва елемент от хеш, указва далиКогато обработва елемент от хеш, указва дали стойността е дефинирана, а не дали този ключ е встойността е дефинирана, а не дали този ключ е в хеша. За да разберете дали ключа съществувахеша. За да разберете дали ключа съществува ползвайтеползвайте exists.exists. my %f_colors = ('apple', 'red', 'banana', 'yellow');my %f_colors = ('apple', 'red', 'banana', 'yellow'); my @f_colors = %f_colors;my @f_colors = %f_colors; defined $f_colors[0] anddefined $f_colors[0] and print $f_colors[0] .' defined';print $f_colors[0] .' defined'; defined $f_colors{'apple'} anddefined $f_colors{'apple'} and print ' and is '.$f_colors{'apple'};print ' and is '.$f_colors{'apple'}; #...#...
  • 9. Работа с елементите на хешаРабота с елементите на хеша • delete EXPRdelete EXPR • В израз, който определя елемент или отрязък отВ израз, който определя елемент или отрязък от хеш или масив, изтрива посочения елемент (илихеш или масив, изтрива посочения елемент (или елементи) от хеша или масива...елементи) от хеша или масива... • Връща списък със същия брой елементи, коитоВръща списък със същия брой елементи, които са били премахнати. Всеки елемент от тозиса били премахнати. Всеки елемент от този списък представлява или стойността на изтритиясписък представлява или стойността на изтрития елемент, или недефинирана стойност.елемент, или недефинирана стойност. • В скаларен контекст, връща стойността наВ скаларен контекст, връща стойността на последния изтрит елемент (или недефиниранатапоследния изтрит елемент (или недефинираната стойност, ако този елемент не съществува).стойност, ако този елемент не съществува). Виж: perlfunc/deleteВиж: perlfunc/delete
  • 10. Работа с елементите на хешаРабота с елементите на хеша • delete (Пример)delete (Пример) my %f_colors = ('apple', 'red', 'banana', 'yellow');my %f_colors = ('apple', 'red', 'banana', 'yellow'); my @f_colors = %f_colors;my @f_colors = %f_colors; push @f_colors,('pear','yellow');push @f_colors,('pear','yellow'); %f_colors = @f_colors;%f_colors = @f_colors; print Dumper @f_colors;print Dumper @f_colors; print Dumper %f_colors;print Dumper %f_colors; print delete $f_colors[-1];print delete $f_colors[-1]; print delete @f_colors{qw(apple banana)};print delete @f_colors{qw(apple banana)}; print 'after delete:';print 'after delete:'; print Dumper %f_colors;print Dumper %f_colors; print Dumper @f_colors;print Dumper @f_colors;
  • 11. Други функции за работаДруги функции за работа с хешс хеш • eacheach • keyskeys • valuesvalues
  • 12. Други функции за хешДруги функции за хеш • each HASHeach HASH • Когато е извикан в списъчен контекст, връщаКогато е извикан в списъчен контекст, връща двуелементен списък, състоящ се от ключ и стойностдвуелементен списък, състоящ се от ключ и стойност на следващия елемент от хеша, така че можете да гона следващия елемент от хеша, така че можете да го обхождате (итерация).обхождате (итерация). • Когато е извикан в скаларен контекст, връща самоКогато е извикан в скаларен контекст, връща само ключа на следващия елемент от хеша.ключа на следващия елемент от хеша. • Записите се връщат в привидно произволен ред.Записите се връщат в привидно произволен ред. • Но този произволен ред е в действителност същиятНо този произволен ред е в действителност същият ред, какъвто функциятаред, какъвто функцията keyskeys илиили valuesvalues бихабиха направили в същия този (немодифициран) хеш.направили в същия този (немодифициран) хеш. while (($key,$value) = each %ENV) {while (($key,$value) = each %ENV) { print "$key=>$valuen";print "$key=>$valuen"; }}
  • 13. Други функции за хешДруги функции за хеш • keys HASHkeys HASH Връща списък, който се състои отВръща списък, който се състои от всички ключове на съответния хеш. (Ввсички ключове на съответния хеш. (В скаларен контекст, връща броя наскаларен контекст, връща броя на ключовете.)ключовете.) #sorted by key#sorted by key foreach $key (sort(keys %ENV)) {foreach $key (sort(keys %ENV)) { print $key, ' => ', $ENV{$key}, "n";print $key, ' => ', $ENV{$key}, "n"; }}
  • 14. Други функции за хешДруги функции за хеш • values HASHvalues HASH • Връща списък, който се състои от всичкиВръща списък, който се състои от всички стойности на съответния хеш. (В скаларенстойности на съответния хеш. (В скаларен контекст, връща броя на стойностите.)контекст, връща броя на стойностите.) • Има само един итератор (шаблон) за всекиИма само един итератор (шаблон) за всеки хеш, който се ползва при всяко извикване нахеш, който се ползва при всяко извикване на eacheach,, keyskeys ии valuesvalues, програмата, програмата.. #sorted by value#sorted by value foreach my $value (sort(values %ENV)) {foreach my $value (sort(values %ENV)) { print $value, "n";print $value, "n"; }}