当前位置: 首页 > 知识库问答 >
问题:

如何在Raku中循环一个散列的排序(自定义排序)键?

姬宝
2023-03-14

尝试逐步将一些Perl脚本转换为Raku。即使在这里浏览了大量内容并深入阅读了《学习Perl6》之后,我仍然坚持下面的一条。

我无法取得进展的部分是最后一个循环(转换为for);获取键并按月名和日号排序看起来是不可能的,但我确信这是可行的。

任何关于如何用“惯用的”语法实现这一点的提示都是非常受欢迎的。

#!/usr/bin/perl

use strict;

my %totals;

while (<>) {
    if (/redis/ and /Partial/) {
        my($f1, $f2) = split(' ');
        my $w = $f1 . ' ' . $f2;
        $totals{$w}++;
    }
}

my %m = ("jan" => 1, "feb" => 2, "mar" => 3, "apr" => 4, "may" => 5, "jun" => 6,
         "jul" => 7, "aug" => 8, "sep" => 9, "oct" => 10, "nov" => 11, "dec" => 12);

foreach my $e (sort { my($a1, $a2) = split(' ', $a) ; my($b1, $b2) = split(' ', $b) ;
            $m{lc $a1} <=> $m{lc $b1} or $a2 <=> $b2 } keys %totals) {
    print "$e", " ", $totals{$e}, "\n";
}

共有1个答案

孔阳平
2023-03-14

您可以尝试以下方法:

enum Month (jan => 1, |<feb mar apr may jun jul aug sep oct nov dec>);

lines()
andthen .grep: /redis/&/Partial/
andthen .map: *.words
andthen .map: {Month::{.[0].lc} => .[1].Int}\ 
#or andthen .map: {Date.new: year => Date.today.year, month =>  Month::{.[0].lc},  day => .[1], }\
andthen  bag $_
andthen .sort
andthen .map: *.put;
 类似资料:
  • 我试图在PrimeFaces数据表上实现一个排序函数。我已经创建了一个模型对象列表。我们有一个问题是表的排序顺序。排序列包含整数和字符串值。当我应用等默认排序机制时,列表是基于ASCII顺序排序的。下面是排序结果的图像。我目前正在使用PrimeFaces V5.2.5 谁能指导我如何克服这个问题。

  • 这段代码的输出是:周一周二周三周四周五周六周日 但是我想要的输出是这样的SUN MON TUE WED THU FRI SAT 这意味着我想定制排序功能,将星期天移到第一天。 我该怎么做?提前谢谢。

  • 这主要是为了让你知道Raku有多棒。 我至少能想到几个。 更繁琐的脚踏实地的方法是将映射到惰性范围上。在repl中: 一个更酷的解决方案(我认为)是让你先把你的列表变成一张单子,然后对这个单子无限期地应用重复操作符: 这是对@Brad Gilbert的答案略作阐述。运算符在超运算符中包装字符串连接,这导致将包装后的二进制运算符应用于从两个列表中顺序选择的元素。 因此,为了实现我想要的(列表循环到一

  • 问题内容: 我使用atocomplete.jquery插件来建议输入文本,结果得到了这个数组: 当我开始搜索从子字符串开始的东西时,它显示出数组排序如下: 我需要这样的东西: 有任何想法吗? 问题答案: 该插件可能区分大小写。尝试输入而不是。您可能将结果设置为不区分大小写。这个问题可能会有所帮助。 对于上的自定义排序函数,您可以使用任何JavaScript函数并将其作为参数传递给的方法,如下所示:

  • 问题内容: 如何在Django中定义特定顺序? 具体来说,如果我有QuerySet这样的话:。 我正在寻找以下商品时,按常规订购(使用)会给我。 定义自己的订购技术的正确方法是什么? 问题答案: 据我所知,没有办法以这种方式指定数据库端的排序,因为它过于特定于后端。你可能希望采用老式的Python排序: 如果你发现自己非常需要这种排序,那么建议你为执行排序的模型制作一个自定义子类。就像是:

  • 假设我有一个哈希数据结构,构造如下: 在这种情况下,如何按值从最大到最小对键进行排序?然后我想打印出最高的两个。这是一个大致的想法,但我知道这是错误的: 我想要打印代码(空格以制表符分隔):