hash - 通过在 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
实际上如何做到这一点,即不构造循环(如果有的话)?
可选在打印哈希之前,我想将其转换并分配为临时数据结构,例如( <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";
}
推荐阅读
- c# - 为什么我的项目没有从 Visual Studio 上传到 github?
- python - 烧瓶复选框和文本框问题
- python - 如何在 Seaborn catplot 中指定自定义误差线?
- android - 我是否安全地注入了上下文?匕首,Android Studio 警告
- xml - Odoo 10:安全访问自定义模块
- sql-server - 搜索电子邮件仅包含 X 字符的行
- java - 服务完成后如何禁用按钮?
- sql - DB2如何找到两个在同一日期活跃的用户
- postgresql - 将 Google CloudSQL Postgres 数据库连接到 Data Studio
- php - 致命错误:未捕获的 Facebook\WebDriver\Exception\UnknownServerException:等待驱动程序服务器以 ChromeDriver 和 Selenium 启动时超时