Obtenha o item com o maior valor em uma coleção de Bolsas em Raku

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

Como obter o item (chave) com o maior valor, ou seja, o 2(5)da coleção Bag?

(Opcional) Existe uma maneira de dizer à Bolsa para contar apenas os elementos sucessivos e desconsiderar todos os que não são sucessivos para que o resultado seja Bag(2(4), 4(2))?

Lars Malmsteen
fonte
2
"desconsidere todos os que não são sucessivos" ... .oO (mantenha apenas um valor se for o mesmo que o anterior ou o posterior) ...<1 2 2 3 2 4 4 2 2> .rotor(3=>-2, :partial) .map: { .[1] if .[1] === .[0] | .[2] }
raiph 14/04

Respostas:

9

Para responder à sua primeira pergunta, existe um método para isso:

say $coll.maxpairs; # 2 => 5

Para responder à sua segunda pergunta: não, você não pode. Você só pode criar alguma lógica que pré-processe os valores antes de chegar ao Bag.

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

Deixando a parte * somelogic * como um exercício para o leitor.

Elizabeth Mattijsen
fonte
Tendo concentrada no uso de Bageu não ter vindo através do maxpairsmétodo. Acontece que é um método geral que se aplica a qualquer lista associativa. Não sabia disso. Bom saber.
Lars Malmsteen
1
Talvez isso seja digno de uma questão de documento :-)
Elizabeth Mattijsen