2016-10-24 23 views
-1

我有一个数组,我想要转换成哈希表。基本上,我希望@array[0]成为散列的关键字,而@array[1]成为散列的值。有没有一种简单的方法在Perl中做到这一点?我到目前为止的代码如下:在perl中创建数组中的哈希

#!/usr/bin/perl 
use warnings; 
use strict; 
use diagnostics; 

unless(open(INFILE, "<", 'scratch/Drosophila/fb_synonym_fb_2014_05.tsv')) { 
die "Cannot open file for reading: ", $!; 

while(<INFILE>) { 
my @values = split(); 
#convert values[0] to keys, values[1] to values 
} 

文件可供下载here

+0

'@array [0]'是一个包含'$ array [0]'的单元素片。你的意思是'@ {$ array [0]}'? – melpomene

+0

不明确的问题。除非您提供更多信息,否则我们只能猜测您要做什么。 '@ array'里面有什么。 –

+0

@inferno我很抱歉我在匆忙中问了这个问题,我已经添加了我的代码来帮助澄清。 –

回答

3

@array[0](数组切片,用于返回多个元素)是写$array[0]的好方法(数组查找,用于返回单个元素)。 use warnings;会告诉你这个。


要设置一个哈希元素,一个使用

$hash{$key} = $val; 

所以代码变得

my %hash; 
while (<>) { 
    chomp; 
    my @fields = split /\t/; 
    $hash{ $fields[0] } = $fields[1]; 
} 

更重要的是,

my %hash; 
while (<>) { 
    chomp; 
    my ($key, $val) = split /\t/; 
    $hash{$key} = $val; 
} 

文件的名称所暗示的字段是制表符分隔,没有空格隔开,所以我切换

split ' ' 

split /\t/ 

这需要另外的chomp