我需要创建类似于这样的内容:
my $valueref = {
1 => 1,
2 => 2,
3 => 3,
4 => 4
};
根据特定条件,它可能是40、50或60。在每种情况下,它都是连续的整数,如示例所示。创建后,它将永远不会更改,只需传递给预先存在的子程序。由于键和值都是连续的,我也可以使用for
循环创建哈希表。我想知道创建哈希表的最快和/或最有效的方法是什么?或者是否还有其他方法可以完成它?
my $valueref = { map { $_ => $_ } 1 .. 40 };
尽管这里可能需要注意的是,其实这是一个数组...
my @array = 0 .. 40;
所以$valueref->{$n}
实际上是$array[$n]
。我不知道在这种情况下使用哈希表是否有任何好处。
我会用map
来处理这个问题:
my $highest_value = 50;
my %foo = map { $_ => $_ } 1 .. $highest_value ;
请记住,哈希表中不保证元素的顺序。
听起来这是一个很好的使用 state
关键字(或闭包)的候选方案:
use feature 'state';
sub foo {
my ( $param1, $param2, $limit ) = @_;
state $valueref = { map { $_ => $_ } 0 .. $limit };
...
}
哈希切片?类似这样:
my %hash;
my $count = 10;
@hash{1..$count} = (1..$count);
push @array, 0..40
或者@array = 0..40
? - Brad Gilbert