我有一个散列%h,我想for按键的字母顺序处理语句中的数据。
但是如果我sort在散列上使用 a ,我会得到一个Pairs的列表,这是可以理解的。但是我如何解压这个for声明。
目前我正在使用以下内容:
my %h = <xabsu ieunef runf awww bbv> Z=> 1..*; # create a hash with random key names
for %h.sort {
my ($name, $num) = (.key, .value);
say "name: $name, num: $num"
}
# Output
# name: awww, num: 4
# name: bbv, num: 5
# name: ieunef, num: 2
# name: runf, num: 3
# name: xabsu, num: 1
Run Code Online (Sandbox Code Playgroud)
但我更喜欢更惯用的形式:
my %h = <xabsu ieunef runf awww bbv> Z=> 1..*; # create a hash with random key names
for %h.sort -> $name, $num {
say "name: $name, num: $num"
}
# Output
# name: awww 4, num: bbv 5
# name: ieunef 2, num: runf 3
# Too few positionals passed; expected 2 arguments but got 1
# in block <unit> at <unknown file> line 1
Run Code Online (Sandbox Code Playgroud)
我确信有一种更简洁的方法可以将 Pair '解包'成for声明的签名。
Eli*_*sen 11
更整洁的方法:
for %h.sort -> (:key($name), :value($num)) {
Run Code Online (Sandbox Code Playgroud)
这Pair通过调用.key和.value来解构,然后将它们分别绑定到$name和$num。
也许是一个更短、更容易理解的版本:
for %h.sort -> (:$key, :$value) {
Run Code Online (Sandbox Code Playgroud)
这将创建与调用方法具有相同名称的变量。