我有一个哈希 %h
我想处理 for
中的数据键的字母顺序声明。
但是如果我使用 sort
在哈希上,我得到了 Pair
的列表s,这是可以理解的。但是我该如何解压这个 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
但我更喜欢更惯用的形式: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
我确信有一种更简洁的方法可以将 Pair '解包'到 for
的签名中。陈述。
最佳答案
更整洁的方式:
for %h.sort -> (:key($name), :value($num)) {
这会破坏 Pair
调用 .key
和 .value
上,然后将它们绑定(bind)到 $name
和 $num
分别。也许是一个更短、更容易理解的版本:
for %h.sort -> (:$key, :$value) {
这将创建与调用方法的名称相同的变量。
关于sorting - 如何在 for 中的哈希上使用排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63561221/