Курс по Raku / Основи / Повече за типовете / Асоциативни типове данни / Exercises / Виждано преди?
Решение: Виждано преди?
Тази задача е класически пример за използване на хеш за проследяване
на елементи. Преди цикъла се създава хеш %seen. Вътре в
цикъла, въведената дума $word служи като ключ на хеша.
Код
Ето решението:
my %seen;
loop {
my $word = prompt 'Дума: ';
if %seen{$word} {
say %seen{$word} == 1 ?? 'Виждано!' !! say "Виждано %seen{$word} пъти!";
}
%seen{$word}++;
}🦋 Намерете програмата във файла seen-before.raku.
Изход
$ raku exercises/associatives/seen-before.raku
Дума: Аз
Дума: никога
Дума: не
Дума: видях
Дума: трион
Виждано!
Дума: това
Дума: трион
Виждано 2 пъти!
Вярно
Дума: като
Дума: това
Виждано!
Дума: трион
Виждано 3 пъти!
Вярно
Дума: трионен
Дума: ^CКоментар
Конструкцията %seen{$word}++ не само увеличава
стойността, но и я създава, ако все още не съществува. Процесът на
създаване се нарича автовивификация. Забележете, че това не се
случва, когато само четете стойността, както в условието:
if %seen{$word}.