Как найти индекс максимального значения в списке в Perl 6?

Достаточно легко найти максимальное значение в списке в Perl 6:

> my @list = 1,4,9,7,3;
> say @list.max;
9

Но если я хочу найти индекс максимальной записи, не кажется, что это элегантный способ сделать это.

> say (^@list).sort({ [email protected][$_] })[0];
2
> say @list.pairs.sort(*.value).tail.key;
2
> say @list.first(@list.max, :k);
2

Все работают, но они едва ли элегантны, не говоря уже об эффективности.

Есть ли лучший способ сделать это?

Было бы неплохо, если бы у max были опции :k, :v и :kv, например, например first. Конечно, не может быть уникального индекса (например, в случае (1,4,9,7,9).max, но опять же, не может быть и уникального значения:

> dd (1, 2.0, 2.0e0, 2).max;
2.0
> say <the quick brown fox>.max(*.chars);
quick

max уже извлекает первое максимальное значение, поэтому было бы вполне разумно вернуть первый индекс с помощью :k (или :kv).

Ответ 1

Вы можете использовать

@list.maxpairs

чтобы получить список всех пар индексов и максимальных значений или

@list.pairs.max(*.value).key

чтобы получить только один индекс.

Насколько я вижу, обе maxpairs и возможность обеспечить преобразование в max все еще недокументированы.