在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选项,比如首先有
当然,可能没有一个唯一的索引(例如,在(1,9)的最大值的情况下,但是再次可能没有一个唯一的值:
> dd (1,2.0,2.0e0,2).max; 2.0 > say <the quick brown fox>.max(*.chars); quick
max已经检索到第一个最大值,所以返回带有:k(或:kv)的第一个索引是完全合理的.
解决方法
您可以使用
@list.maxpairs
获取所有索引和最大值的配对列表
@list.pairs.max(*.value).key
得到一个单一的索引.
就我所见,maxpairs和向max提供转换的能力仍然没有记录.