.Bag.invert.max.value
Beispiel:
$_ = < 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…
Wenn es ein Unentschieden gibt, wird das größere Unentschieden gedruckt.
Die .Bag
Methode für eine Liste oder ein Array erstellt einen quantifizierten Hash, der die Gesamtanzahl der Aufrufe eines bestimmten Werts mit diesem Wert verknüpft.
bag(4(4), 3(3), 1(5), 0(2), 6(2), 7(2), 2, 8)
Die .invert
Methode erstellt eine Liste der Paare in der Tasche mit dem Schlüssel und dem getauschten Wert. (Der Grund, warum wir dies nennen, ist, dass die nächste Methode das tut, was wir wollen.)
4 => 4, 3 => 3, 5 => 1, 2 => 0, 2 => 6, 2 => 7, 1 => 2, 1 => 8
Die .max
Methode auf einer Liste von Paaren gibt das größte Paar zurück, das zuerst die Schlüssel vergleicht, und im Falle eines Gleichstands, das die Werte vergleicht.
(Dies ist, weil so multi infix:<cmp>(Pair:D \a, Pair:D \b)
bestimmt wird, welche größer ist)
5 => 1
Die .value
Methode gibt den Wert aus dem Pair zurück. (Es wäre der Schlüssel gewesen, nach dem wir gesucht hätten, wenn der .invert
Anruf nicht früher stattgefunden hätte.)
1
Wenn Sie alle Werte zurückgeben möchten, die bei einem Unentschieden gebunden wurden:
say @list.Bag.classify(*.value).max.value».key
Die .classify
Methode gibt eine Liste von Paaren zurück, bei denen die Schlüssel vom Aufrufen des Whatever-Lambda *.value
mit jedem der Paare stammen.
1 => [2 => 1, 8 => 1],
2 => [0 => 2, 6 => 2, 7 => 2],
3 => [3 => 3],
4 => [4 => 4],
5 => [1 => 5]
Dann rufen wir .max
an, um das größte Paar zu bekommen.
"5" => [1 => 5]
Ein Anruf, um .value
uns die originalen Paare aus der Tasche zu holen (in diesem Fall nur eines)
1 => 5
Anschließend >>.key
rufen wir die .key
Methode für jedes Paar in der Liste auf, sodass wir eine Liste der Werte erhalten, die am häufigsten gesehen wurden.
1