2011-10-03 83 views
0

Hej尖锐的头脑!将txt文件读入perl的散列

我需要将文本文件加载到散列。一行是关键,下一行是价值。那重复数百万次。任何建议如何以最好的方式做到这一点?

如果让我们说键是15个字符和值是50个字符,散列表需要多少内存?

由于

回答

5

下面的代码应该加载文本文件转换成散列:

my %hash; 

while (chomp(my $key = <DATA>)) { 
    chomp(my $val = <DATA>); 
    $hash{$key} = $val; 
} 

散列条目的存储器开销将取决于体系结构(32与64位),但是应该大约为散列本身的几百字节,然后每个键和值大约30-60字节,加上键和值数据类型的开销。您可以使用Devel::Size自行检查。也read this

所以在你的例子,一个64位的平台上,一百万条目应大致花费:

136散列

58 + 15 + 58 + 50 181 ==每键/值对x 1,000,000

对于您指定大小的百万条目,为181MB。

+0

感谢您提供丰富的答案。正是我所期待的。 – iggy

+0

我在“./test.pl 16行, 10000行中获得chomp中未初始化值$ key的使用”。这是测试文件的最后一行......我看到$ key获取undef的方式,但有没有办法解决这个问题? – iggy

+0

@iggy:你可以将代码封装在一个没有警告的未初始化的编译指示块中,或者将read('<>')从'chomp'中分开,并在继续循环之前检查键/值的定义。这只是示例代码,当然需要针对您的需求进行微调。 –