Хешове

  • 129 views
Uploaded on

Това е превод на български от Теодора Берова на четвъртия урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков. …

Това е превод на български от Теодора Берова на четвъртия урок от поредицата уроци, които водих преди време за QA-отдела на голяма международна компания, по покана на Светлин Наков.
Искам да го споделя с всеки, който търси непреходни знания по Perl.
Таблица със съдържанието на курса може да бъде намерена на http://i-can.eu/ .
Изходният код на примерите и уроците в ODP формат се намират на адрес https://github.com/kberov/PerlProgrammingCourse/ .

More in: Software
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
129
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Курс по програмиранеКурс по програмиране на Perlна Perl ХешовеХешове I-can.eu Автор: Красимир Беров, Превод: Теодора Берова
  • 2. ХешовеХешове
  • 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"; }}
  • 15. ХешовеХешове Въпроси?Въпроси?
  • 16. УпражненияУпражнения