我有许多不同长度的列表。每个列表都以一些数字开头,这些数字是多位数字,但以重复出现的一位数字结尾。例如:
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 位数字(@d
7 和@e
5)第一次出现的位置。理想情况下,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
实际找到条目时才显示切片。
见有更多的信息。
归档时间: |
|
查看次数: |
76 次 |
最近记录: |