通过在 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";
}
我会记录一个字母在一个单词中出现的次数,例如'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";
}