如何在Perl 6中的列表中找到最大值的索引?

时间:2017-01-09 18:38:22

标签: perl6 raku

在Perl 6中找到列表中的最大值很容易:

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

但如果我想找到最大条目的索引,似乎没有一种优雅的方法来做到这一点。

> say (^@list).sort({ -@list[$_] })[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(或{{)返回第一个索引是完全合理的。 1}})。

1 个答案:

答案 0 :(得分:13)

您可以使用

@list.maxpairs

获取所有索引和最大值配对的列表或

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

只获得一个索引。

据我所知,maxpairs和向max提供转换的能力仍然没有记录。