在Raku列表中查找1位数数字的首次出现

问题描述

我有许多不同长度的清单。每个列表以一些数字开头,这些数字是多位数字,但以一个循环的1位数字结尾。例如:

my @d = <751932 512775 64440 59994 9992 3799 423 2 2 2 2>;
my @e = <3750 3177 4536 4545 686 3 3 3>;

我想找到一个1位数数字第一次出现的位置(对于@d 7和@e 5),而无需构造任何循环。理想情况下,lambda(或任何其他实际事物)应使用诸如$_.chars == 1之类的条件遍历列表,并且一旦满足条件,它应停止并返回位置。与其重设职位,不如返回列表直到1位数字。欢迎更改和即兴创作。怎么做?

解决方法

您想要:k上的first修饰符:

say @d.first( *.chars == 1,:k ) # 7
say @e.first( *.chars == 1,:k ) # 5

有关更多信息,请参见first

要回答问题的第二部分:

say @d[^$_] with @d.first( *.chars == 1,:k );
# (751932 512775 64440 59994 9992 3799 423)
say @e[^$_] with @e.first( *.chars == 1,:k );
# (3750 3177 4536 4545 686)

请确保使用with以确保仅在first实际找到条目时才显示切片。

有关更多信息,请参见with