Raku kurss / Pielikums 🆕 / Viss kopā / Jaukti miniprojekti / Exercises / Vērtējumi no CSV rindām
Risinājums: Vērtējumi no CSV rindām
Šeit ir iespējams risinājums uzdevumam.
Kods
my @lines = 'Anna,90', 'Bob,72', 'Cara,84';
my %score;
for @lines -> $line {
my ($name, $mark) = $line.split(',');
%score{$name} = $mark.Int;
}
my $average = ([+] %score.values) / %score.elems;
say "average: $average";
say "above average:";
for %score.sort -> $pair {
say " {$pair.key}" if $pair.value > $average;
}🦋 Atrodiet programmu failā csv-averages.raku.
Izvade
average: 82
above average:
Anna
CaraKomentāri
Katras rindas sadalīšana pēc komata un piešķiršana
($name, $mark)abus laukus izsaiņo uzreiz;.Intvērtējuma tekstu pārvērš skaitlī.Vidējais ir vērtību summa, dalīta ar to skaitu; tiek uzskaitīts ikviens, kura vērtējums to pārspēj. Šeit vidējais iznāk apaļš
82.Šo pēdējo ciklu var uzrakstīt kā konveijeru.
sortsakārto pārus,greppatur tos, kas ir virs vidējā, unmapkatru izdzīvojušo pāri sarauj līdz tā vārdam — tā cikla ķermenī nav nekādas loģikas, tikai izdrukāšana:say " $_" for %score.sort.grep(*.value > $average).map(*.key);
Lasot no kreisās uz labo, tas pasaka tieši to, ko dara: sakārto, paturi tos, kas virs vidējā, paņem to vārdus. Katrs posms ir mazs, patstāvīgs solis, un
*.value/*.keyir Whatever zvaigznītes, kas uz vietas uzbūvē viena argumenta bloku.