我如何在 Perl 6 的列表中找到最大值的索引?
How do I find the index of the maximum value in a list in Perl 6?
在 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
已经检索到 first 最大值,因此 return 第一个 index[=39 是完全合理的=] 和 :k
(或 :kv
)。
您可以使用
@list.maxpairs
获取所有索引和最大值对的列表或
@list.pairs.max(*.value).key
只获取一个索引。
据我所知,maxpairs
和向 max
提供转换的能力仍未记录。
在 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
已经检索到 first 最大值,因此 return 第一个 index[=39 是完全合理的=] 和 :k
(或 :kv
)。
您可以使用
@list.maxpairs
获取所有索引和最大值对的列表或
@list.pairs.max(*.value).key
只获取一个索引。
据我所知,maxpairs
和向 max
提供转换的能力仍未记录。