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

对perl中哈希的哈希的两个级别的键进行排序

越扬
2023-03-14

我有一个代码,我需要跟踪不同类别中给定位置的一些值(随机出现)(并且数量相当大;~40,000),所以我认为散列散列是最好的方法,类别作为第一层键,位置作为第二层,值作为值;类似于:

%HoH = {
      'cat1' => {
                  '7010' => 19,
                  '6490' => 13,
                  '11980' => 2
               }
      'cat2' => {
                  '7010' => 28,
                  '10470' => 13,
                  '205980' => 54
               }
        }

然后,我需要按照这两个类别的顺序对它们进行排序和打印,然后进行定位,得到如下输出文件:

cat1    6490     13
cat1    7010     19
...
cat2    7010     28

但是我无法计算出嵌套排序的语法(或者,有人比这种方法有更好的想法吗?

共有1个答案

劳法
2023-03-14

Perl使得在遍历散列的同时对键进行有效排序变得容易:

for my $cat (sort keys %HoH) {
    # numerical sort:
    for my $digits (sort { $a <=> $b } keys %{$HoH{$cat}}) {
        print join("\t", $cat, $digits, $HoH{$cat}{$digits}) . "\n";
    }
}
 类似资料:
  • 主要内容:实例,创建哈希,访问哈希元素,实例,读取哈希值,实例,读取哈希的 key 和 value,实例,实例,检测元素是否存在,实例,获取哈希大小,实例,哈希中添加或删除元素,实例,迭代哈希,实例 - 使用 foreach,实例 - 使用 while哈希是 key/value 对的集合。 Perl中哈希变量以百分号 (%) 标记开始。 访问哈希元素格式:${key}。 以下是一个简单的哈希实例: 实例 #!/usr/bin/perl %data = ('google', 'google.com

  • 哈希是 key/value 对的集合。 Perl中哈希变量以百分号 (%) 标记开始。 访问哈希元素格式:${key}。 以下是一个简单的哈希实例:#!/usr/bin/perl %data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com'); print "\$data{'google'} = $d

  • 问题内容: 假设我有一些新闻存储在哈希中。我有不同的哈希值(每个哈希值代表一个消息): 我想用KEYS命令检索所有键: 密钥未排序的问题: 我想以正确的顺序检索键列表。我不确定哈希是否是我需要的结构。但是,根据redis文档: Redis哈希是字符串字段和字符串值之间的映射,因此它们是表示对象的理想数据类型(例如,具有多个字段(例如名称,姓氏,年龄等)的用户): 将我的新闻对象存储在散列中似乎是个

  • 例如,我有Hashmap 如何根据键的某些属性对Map进行排序?

  • 我的哈希如下: (结构实际上比这更复杂;我在这里将其简化。) 我希望对时间戳进行“全局”排序,然后对内部散列的键(一、二、三adam)进行排序。但是内部散列的键是动态的;在从文件中读取数据之前,我不知道它们将是什么。 我希望上述散列的排序输出为: 我已经看了很多关于按键和/或值对哈希进行排序的问题/答案,但是当键名称事先不知道时,我还无法弄清楚。(或者也许我只是不理解它。) 我现在要做的是两个步骤

  • 我有一个HashMap,其中类的对象(对象1,对象2,对象3)作为键,java.util.Date(日期1,日期2,日期3)作为值。HashMap已经根据值进行了排序,即基于日期对象。键对象具有名为name的属性。 现在,当HashMap的值相同时,即当值的日期相同时,我需要检查键对象的名称(obj.name),并根据键对象的名称属性对HashMap进行排序。请注意,只有当HasHMap和值的日期