2016-10-24 47 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