Holen Sie sich den Artikel mit dem größten Wert in einer Taschenkollektion in Raku

7
my $coll=bag <1 2 2 3 2 4 4 2 2>;
say $coll; # => Bag(1, 2(5), 3, 4(2))

Wie bekomme ich den Artikel (Schlüssel) mit dem größten Wert, dh den 2(5)aus dieser Taschenkollektion?

(Optional) Gibt es eine Möglichkeit, die Tasche anzuweisen, nur die Elemente zu zählen, die aufeinander folgen, und alle Elemente, die nicht aufeinander folgen, zu ignorieren, damit das Ergebnis erzielt wird Bag(2(4), 4(2))?

Lars Malmsteen
quelle
2
"Ignoriere alle, die nicht aufeinander folgen" ... .oO (behalte nur einen Wert, wenn er mit dem vorher oder nachher <1 2 2 3 2 4 4 2 2> .rotor(3=>-2, :partial) .map: { .[1] if .[1] === .[0] | .[2] }
identisch ist

Antworten:

9

Um Ihre erste Frage zu beantworten, gibt es dafür eine Methode:

say $coll.maxpairs; # 2 => 5

Um Ihre zweite Frage zu beantworten: Nein, können Sie nicht. Sie können nur eine Logik entwickeln, die die Werte vorverarbeitet, bevor Sie zum gelangen Bag.

 <1 2 2 3 2 4 4 2 2>.map( *somelogic* ).Bag

Den * somelogischen * Teil als Übung dem Leser überlassen.

Elizabeth Mattijsen
quelle
Nachdem Bagich mich auf die Verwendung von konzentriert habe, bin ich nicht auf die maxpairsMethode gestoßen. Es stellt sich heraus, dass es sich um eine allgemeine Methode handelt, die für jede assoziative Liste gilt. Wusste es nicht. Gut zu wissen.
Lars Malmsteen
1
Vielleicht ist das eines Doc-Problems würdig :-)
Elizabeth Mattijsen