通过在 Raku 中对它们的值进行分组来打印散列元素

Print the hash elements by grouping their values in Raku

我会记录一个字母在一个单词中出现的次数,例如'embeddedss'

my %x := {e => 3, m => 1, b => 1, d => 3, s => 2};

我想按如下方式对元素的值进行分组来打印元素:

# e and d 3 times
# m and b 1 times
# s 2 times

如何实际操作,即不构造循环(如果有)?

Optional 在打印散列之前,我想将它转换并赋给一个临时数据结构,例如( <3 e d>, <1 m b>, <2 s> ),然后打印它。最实用的数据结构和打印方式是什么?

按照评论中的建议使用.categorize,您可以根据值将它们组合在一起。

%x.categorize(*.value)

这会生成一个哈希,键是用于分类的值,值是原始哈希 ($x) 中的对。这可以使用 for.map 循环。您最初计算的字母是 Pairs 的关键,可以使用 .map.

巧妙地提取出来
for %x.categorize(*.value) {
    say "{$_.value.map(*.key).join(' and ')} {$_.key} times";
}

您也可以选择使用 .sort 按出现次数对列表进行排序。这将首先对最小的数字进行排序,但是添加一个简单的 .reverse 将使最大值排在第一位。

for %x.categorize(*.value).sort.reverse {
     say "{$_.value.map(*.key).join(' and ')} {$_.key} times";
}