【问题标题】:Perl: Sort Array after a Hash-valuePerl:在哈希值之后对数组进行排序
【发布时间】:2016-09-01 14:38:11
【问题描述】:

是否有一种“Perl 风格”的方式在哈希值之后对哈希数组进行排序?

my @l = ({k1 => "1", k2 => "one"}, {k1 => "2", k2 => "two"}, 
     {k1 => "3", k2 => "three"});

foreach (@l)
{
  print "\n" . $_->{k1} . ", " . $_->{k2};
}

我得到的订单就是我插入的订单(还有什么......)。但我想在哈希值之后对其进行排序。 我可以想象算法的方式。但我问的是一个可能已经存在的功能或其他东西。

谢谢!

【问题讨论】:

  • 始终使用严格;使用警告;在您的代码中。
  • 你是 100% 正确的。但我认为该样本没有必要。只是为了描述问题。

标签: perl hash


【解决方案1】:

要按k1 键后面的值排序,您可以执行以下操作。

my @sorted = sort { $a->{k1} <=> $b->{k1} } @l;

变量$a$b 是为sort 保留的特殊变量。如果您的列表项是引用,则可以直接使用它们。

输出Data::Printer:

[
    [0] {
        k1   1,
        k2   "one"
    },
    [1] {
        k1   2,
        k2   "two"
    },
    [2] {
        k1   3,
        k2   "three"
    }
]

【讨论】:

  • 谢谢,这就是我要找的 perl'ish ;-)
【解决方案2】:

@list = sort { $a-&gt;{'k1'} &lt;=&gt; $b-&gt;{'k1'} } @l;

【讨论】:

    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    相关资源
    最近更新 更多