这是很容易找到在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,4,9,7,3,9,1'。但是,仍然可以采用更优雅的方式来获取* an *索引。 – mscha
返回值时没有区别。例如。 'dd(1,“2”,2).max(* .Int);'返回Str值'“2”'而不是Int值'2',因为它是第一个。因此'.max(:k)'返回第一个匹配索引将完全符合现有的行为,并且我会考虑这个副词在这里不受支持,这是一个疏忽。 – smls
好点。一个更好的例子可能是'dd(1,2.0e0,2.0,2).max;'。 – mscha