【问题标题】:Sort both levels of keys for hash of hashes in perl对 perl 中哈希的哈希值的两个级别的键进行排序
【发布时间】:2014-09-27 01:48:37
【问题描述】:

我有一个代码,我需要在其中跟踪不同类别中给定位置的一些值(随机出现)(其中相当多;~40,000),所以我认为散列的散列会最好的办法,第一层key是category,第二层是position,values是value;类似:

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

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

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

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

【问题讨论】:

  • 您希望按键按字母、数字还是自然排序?
  • 哦,对不起,数字
  • 您尝试对它进行什么排序?你能告诉我们你写的任何代码吗?
  • 刚刚注意到,为什么在你的输出中cat1 7010 19cat1 6490 13 之前?是否要按降序排序?
  • ...因为我是个白痴。哎呀

标签: perl hash-of-hashes


【解决方案1】:

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";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2019-03-17
    • 2015-03-12
    • 2011-10-25
    • 2018-05-10
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多