2017-01-09 23 views
11

这是很容易找到在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)返回第一个指数

+0

我刚刚意识到*最大值的*索引可能不存在,例如如果列表是'1,4,9,7,3,9,1'。但是,仍然可以采用更优雅的方式来获取* an *索引。 – mscha

+1

返回值时没有区别。例如。 'dd(1,“2”,2).max(* .Int);'返回Str值'“2”'而不是Int值'2',因为它是第一个。因此'.max(:k)'返回第一个匹配索引将完全符合现有的行为,并且我会考虑这个副词在这里不受支持,这是一个疏忽。 – smls

+0

好点。一个更好的例子可能是'dd(1,2.0e0,2.0,2).max;'。 – mscha

回答

13

您可以使用

@list.maxpairs 

获得指数和最大值或

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

的所有配对的名单得到的只是一个单一的指标。

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

+4

谢谢你,两个不错的选择。 (事实上​​,两者都没有记录) – mscha

+0

@mscha是否为无证件提交了文档问题? –

相关问题