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

Lar*_*een 8 list raku

我有许多不同长度的列表。每个列表都以一些数字开头,这些数字是多位数字,但以重复出现的一位数字结尾。例如:

my @d = <751932 512775 64440 59994 9992 3799 423 2 2 2 2>;
my @e = <3750 3177 4536 4545 686 3 3 3>;
Run Code Online (Sandbox Code Playgroud)

我想在不构建任何循环的情况下找到 1 位数字(@d7 和@e5)第一次出现的位置。理想情况下,lambda(或任何其他实用的东西)应该使用条件迭代列表,例如$_.chars == 1,一旦条件满足,它应该停止并返回位置。与其返回位置,不如返回列表直到一位数;欢迎更改和即兴创作。怎么做?

Eli*_*sen 12

你想要:k修饰符first

say @d.first( *.chars == 1, :k ) # 7
say @e.first( *.chars == 1, :k ) # 5
Run Code Online (Sandbox Code Playgroud)

第一获取更多信息。

要回答问题的第二部分:

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)
Run Code Online (Sandbox Code Playgroud)

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

更多的信息。