.Bag.invert.max.value
Przykład:
$_ = < 4 3 1 0 6 1 6 4 4 0 3 1 7 7 3 4 1 1 2 8 >».Int;
say .Bag.invert.max.value; # implicitly calls $_.Bag…
Jeśli jest remis, wydrukuje większy z tych, które związały.
.Bag
Metoda na liście lub tablicy tworzy ilościowo hash, który wiąże się z całkowitą rachubę, ile razy dana wartość została zaobserwowana w tej wartości.
bag(4(4), 3(3), 1(5), 0(2), 6(2), 7(2), 2, 8)
.invert
Metoda tworzy listę par w worku z kluczem i wartością zamienione. (Powodem, dla którego to nazywamy, jest następna metoda robienia tego, co chcemy).
4 => 4, 3 => 3, 5 => 1, 2 => 0, 2 => 6, 2 => 7, 1 => 2, 1 => 8
.max
Metoda na listę par zwraca największą Pair porównujące klucze pierwszy oraz w przypadku remisu porównanie wartości.
(Jest tak, ponieważ w ten sposób multi infix:<cmp>(Pair:D \a, Pair:D \b)
określa się, która jest większa)
5 => 1
.value
Metoda zwraca wartość od pary. (Byłby to klucz, którego szukaliśmy, gdyby nie .invert
wcześniejsza rozmowa)
1
Jeśli chcesz zwrócić wszystkie wartości powiązane w przypadku remisu:
say @list.Bag.classify(*.value).max.value».key
.classify
Metoda zwraca listę par, gdzie klawisze są z wywołaniem lambda cokolwiek *.value
z każdej z par.
1 => [2 => 1, 8 => 1],
2 => [0 => 2, 6 => 2, 7 => 2],
3 => [3 => 3],
4 => [4 => 4],
5 => [1 => 5]
Następnie dzwonimy, .max
aby uzyskać największą parę.
"5" => [1 => 5]
Zadzwoń, by .value
otrzymać oryginalne pary z torby (w tym przypadku tylko jedną)
1 => 5
Następnie używamy metody >>.key
do wywołania .key
metody na każdej parze na liście, dzięki czemu otrzymujemy listę wartości, które były najczęściej oglądane.
1