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

Finding the first occurence of 1-digit number in a list in Raku

我有许多不同长度的列表。每个列表都以一些数字开头,这些数字是多位数字,但以重复出现的 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 等条件遍历列表,一旦满足条件,它就应该停止并 return 位置。与其返回位置,还不如 return 列表直到 1 位数字;欢迎更改和即兴创作。怎么做?

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

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