【问题标题】:How can I sort Perl hashes whose values are array references?如何对值是数组引用的 Perl 哈希进行排序?
【发布时间】:2010-10-24 01:10:43
【问题描述】:

嘿,我只是想知道是否有一个很酷的“一个衬里”可以对我的哈希保存数组引用进行排序。所以我的哈希中有一堆键/值,例如:

$DataBase{$key} = \@value;

但是,我想按 array[0] 元素对哈希进行排序。然后循环遍历它们。我有这个开始:

foreach my $key (sort {$DataBase{$a} cmp $DataBase{$b} } keys %DataBase)

但这显然只是按数组的指针值对我的哈希进行排序。它不一定是“一行”,但我希望有一个不涉及重建哈希的解决方案。

【问题讨论】:

    标签: perl sorting hash reference perl-data-structures


    【解决方案1】:
    foreach my $key (sort {$DataBase{$a}->[0] cmp $DataBase{$b}->[0] } keys %DataBase)
    

    【讨论】:

    • 谢谢,很抱歉这个新手问题...刚开始使用 perl,不知道我可以使用 -> 运算符!
    • 也应该在没有间接的情况下工作,我只是喜欢它们,因为我是一个学究。
    • @Balk:啊,是的,这是访问引用的“好”方式(与 @{$value} 不同)。
    • -> 在两个 {}/[] 事物之间是可选的。见perlmonks.org/?node=references+quick+reference
    【解决方案2】:

    为了记录(你可能来自 C 背景),Perl 没有指针,但references

    Perl [...] 允许您创建 匿名数据结构,以及 支持基本数据类型 松散地称为“参考” 相当于一个 C 指针。就像 C 指针可以指向数据以及 程序,Perl 的参考资料可以 参考常规数据类型 (标量、数组和散列)和 其他实体,例如子程序, 类型球和文件句柄。与 C 不同, 他们不让你偷看和戳 原始内存位置。

    相似,但不一样。

    C.

    【讨论】:

    • 另一个区别是您可以使用 ref 或 Scalar::Util::reftype 询问引用它所指的事物类型。
    【解决方案3】:

    我认为您问的基本问题与How can I sort a hash-of-hashes by key in Perl? 相同。我在 Perl FAQ 中的回答向您展示了如何以您喜欢的任何方式对哈希进行排序。

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 2011-03-10
      • 2011-05-22
      相关资源
      最近更新 更多