是否有用于记住哈希中键的顺序的Perl模块?

时间:2011-11-18 20:19:08

标签: perl

是否存在具有O(log(n))访问时间的基于树的有序键值存储的“规范”(纯)perl实现?

我试过在CPAN上搜索“树”,但是没有太多的洞察力。

This question激励我发布自己的文章。

编辑:所以这个问题没有明确说明。

我正在寻找的是一个几乎不会执行%hash操作的存储,但是以更差的算法复杂度为代价来维护其密钥的顺序。到目前为止我所知道的具有这种属性的所有结构都基于某种树(B树,红黑树等),因此标题。

这是我想看到的伪代码示例:

my $set = Some::Module->new();
$set->store( foo=>1 );
$set->store( bar=>2 );
$set->fetch( "foo" ); # 1
$set->keys(); # bar, foo and not foo, bar
$set->keysBetween( undef, "baz" ); # bar only

2 个答案:

答案 0 :(得分:3)

Tie::IxHashperlfaq4建议:

use Tie::IxHash;
tie my %myhash, 'Tie::IxHash';

for ( my $i=0; $i<20; $i++ ) {

    $myhash{$i} = 2*$i;
}

my @keys = keys %myhash;
# @keys = (0,1,2,3,...)
  

<强>描述

     

此Perl模块实现了保留订单的Perl哈希值   其中添加了哈希元素。订单不受影响   与IxHash中现有键对应的值已更改。该   元素也可以设置为任意提供的顺序。熟悉的   perl数组操作也可以在IxHash上执行。

如果此模块没有切断芥末,请尝试在CPAN上搜索“tie hash order”。

答案 1 :(得分:2)

请参阅Tree