2012-01-02 95 views
4

我需要这样创造的东西:如何有效地创建连续数字的perl散列?

my $valueref = { 
    1 => 1, 
    2 => 2, 
    3 => 3, 
    4 => 4 
}; 

基于一定条件下,它可能是高达40或50或60.在每一种情况下这将是连续的整数,如秀的例子。一旦创建,它将永远不会被改变,只需传递给一个预先存在的子程序。由于键和值都是连续的,我还可以使用for循环创建哈希。我很好奇什么是最快和/或最有效的方式来创建哈希?或者如果还有另一种方式可以完成?

回答

10

使用地图就足够了:

my $valueref = { map { $_ => $_ } 1 .. 40 }; 

尽管人们可能在这里指出,这实际上是一个数组...

my @array = 0 .. 40; 

所以$valueref->{$n}实际上是$array[$n]。我不知道在这种情况下使用散列是否有任何好处。

+3

为什么不'push @array,0..40'或'@array = 0..40'。 – 2012-01-02 15:26:50

+0

@BradGilbert好点。 – TLP 2012-01-02 15:29:59

5

我可能会使用map此:

my $highest_value = 50; 
my %foo = map { $_ => $_ } 1 .. $highest_value ; 

请记住,为了不哈希保证。

5

“创建后,它永远不会被改变,简单的通过一个 预先存在的子程序”


听起来像是不错的候选人state关键字(或关闭):

use feature 'state'; 

sub foo { 

    my ($param1, $param2, $limit) = @_; 
    state $valueref = { map { $_ => $_ } 0 .. $limit }; 

    ... 
} 

这使得人们可以初始化数据结构,然后不必w Orry稍后将其作为论点。

0

散列片?类似这样的:

my %hash; 
my $count = 10; 
@hash{1..$count} = (1..$count); 
相关问题