【问题标题】:Perl sort hash and overwrites/add to new variablePerl 排序哈希并覆盖/添加到新变量
【发布时间】:2021-06-15 18:43:58
【问题描述】:

我对 perl 很陌生,我需要找到一种方法来对哈希进行排序。许多示例将运行排序,然后仅打印到控制台。我需要新的散列变量包含按排序的键。

例如:

my %planets = (
  Mercury => 0.4,
  Venus   => 0.7,
  Earth   => 1,
);
 
foreach my $name (sort keys %planets) {
    printf "this $name \n";
}

我的意思是,我需要将它引用回另一个变量,甚至是 %planets 本身,而不是打印。

所以我预期的最终哈希将是

%new_hash = (
    Earth => 1,
    Mercury => 0.4,
    Venus => 0.7
);

【问题讨论】:

  • 我需要新的散列变量包含按排序的键。不是用values排序的吗?
  • perl.com/article/27/2013/6/16/… 根据这个“按字母排序”说明我们可以按键排序。我需要知道如何引用它或将它放在新的哈希下。

标签: perl hash


【解决方案1】:

你不能。没有排序哈希之类的东西。


没有什么说你必须迭代sort 的结果。您可以将其存储在数组中以备后用。

my @sorted_keys = sort keys(%planets);

另一种可能性是在排序时转换您正在使用的数据结构。

my @sorted_planets =
   map { [ $_, $planets{$_} ] }
      sort keys(%planets);

这会产生:

my @sorted_planets = (
   [ Earth   => 1   ],
   [ Mercury => 0.4 ],
   [ Venus   => 0.7 ],
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2022-07-21
    • 2018-12-17
    相关资源
    最近更新 更多