在 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。
我有许多不同长度的列表。每个列表都以一些数字开头,这些数字是多位数字,但以重复出现的 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。