.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 .BagMethode 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 .invertMethode 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 .maxMethode 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 .valueMethode gibt den Wert aus dem Pair zurück. (Es wäre der Schlüssel gewesen, nach dem wir gesucht hätten, wenn der .invertAnruf 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 .classifyMethode gibt eine Liste von Paaren zurück, bei denen die Schlüssel vom Aufrufen des Whatever-Lambda *.valuemit 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 .maxan, um das größte Paar zu bekommen.
"5" => [1 => 5]
Ein Anruf, um .valueuns die originalen Paare aus der Tasche zu holen (in diesem Fall nur eines)
1 => 5
Anschließend >>.keyrufen wir die .keyMethode für jedes Paar in der Liste auf, sodass wir eine Liste der Werte erhalten, die am häufigsten gesehen wurden.
1