sorting - 如何在 for 中的哈希上使用排序

标签 sorting hash raku

我有一个哈希 %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/

相关文章:

c++ - 我如何在 C++ 中使用 std::sort?

python 文件内容排序

java - 按位与在 Java 哈希表哈希查找中?

regex - Perl 6 的 <|w> 词边界何时不是 << 词边界?

raku - 什么是 nqp、nqp-m、rakudo-debug、rakudo-debug-m、rakudo-gdb-m、rakudo-m、rakudo-valgrind-m?

algorithm - 有哪些方法可以将总集的多个(可能不兼容的)已排序子集组合成总集的(部分)排序?

java - 如何获取给定文本中 N 个最常用的单词,从最大到最小排序?

list - 我可以在对Perl 6列表进行分类时修改值吗?

ruby - Mongoid 'or' 和 'in' - 查询多个数组

MoarVM 中的字符串和链