2009-08-13 23 views
4

私はPerlを初めて使用しています。 Perlで次のようなデータ構造を定義する必要があります。どのようにしてPerlでハッシュのハッシュを作成できますか?

city 1 -> street 1 - [ name , no of house , senior people ] 
      street 2 - [ name , no of house , senior people ] 


    city 2 -> street 1 - [ name , no of house , senior people ] 
      street 2 - [ name , no of house , senior people ] 

これはどのように達成できますか?

+0

プログラムで作成するのか、一度オフにしたような変数を定義したいですか? – Salgar

+0

プログラムによって – Sam

+1

このデータを何らかの種類のファイルから読み取ろうとしていますか?その場合は、そのファイルの簡単な例を提供してください(実際の名前と住所を自然に削除してください)ので、作業しているフォーマットを人々が見ることができます。より一般的には、事前に作られた構造の素晴らしい料理のためのリファレンスと 'perldoc perldsc'を作る方法と使い方の良い入門的な議論のために' perldoc perlreftut'を見てください。あなたはターミナル経由でもオンラインでも入手できます:http://perldoc.perl.org/index-tutorials.html – Telemachus

答えて

4

私はここで、このように

+1

あなたはこの情報を持っていますか?ファイルやスプレッドシート、または何らかの種類のデータベースですか?私はあなたのプログラムを純粋にデータ入力用に使いたいと思うので、データの構造を把握し、レコードを複雑なデータ構造に直接読み込む方が簡単です。あなたはすでに$ streetのために1つの誤植を持っていることに注意してください。たくさんのデータを入力する手は非常に誤りがちです。 – Telemachus

+0

ありがとうございます – Sam

5

を生成することができます

my %city ; 

$city{$c_name}{$street} = [ $name , $no_house , $senior]; 

のような答えがハッシュリファレンスを使用して別の例であるが見つかりました:

my $data = { 
    city1 => { 
     street1 => ['name', 'house no', 'senior people'], 
     street2 => ['name','house no','senior people'], 
    }, 
    city2 => { 
     street1 => etc... 
     ... 
    } 
}; 

あなたはそのデータにアクセスすることができます次のようにします。

$data->{'city1'}{'street1'}[0]; 

または:

my @street_data = @{$data->{'city1'}{'street1'}}; 
print @street_data; 
+0

あなたは作業中であることは明らかです参照に対して。したがって、この '$ data - > {'city1'} {'street1'} [0];'も同様に機能します。 –

+0

素晴らしい点 - 更新されました。 – Logan

1

Perlのデータ構造クックブック、perldscは、助けることができるかもしれません。共通データ構造を作成する方法を示す例があります。

0
my %city ; 

あなたは

push(@{ city{ $c_name } { $street } }, [ $name , $no_house , $senior]); 

(0R)

push @{ city{ $c_name } { $street } }, [ $name , $no_house , $senior]; 
0

をプッシュしたい場合は、this答えで私の短いチュートリアルを読むことができます。つまり、ハッシュへの参照を値に入れることができます。

%hash = (name => 'value'); 
%hash_of_hash = (name => \%hash); 
#OR 
$hash_of_hash{ name } = \%hash; 


# NOTICE: {} for hash, and [] for array 
%hash2 = (of_hash => { of_array => [1,2,3] }); 
#     ---^   ---^ 
$hash2{ of_hash }{ of_array }[ 2 ]; # value is '3' 
#  ^-- lack of -> because declared by % and() 


# same but with hash reference 
# NOTICE: { } when declare 
# NOTICE: -> when access 
$hash_ref = { of_hash => { of_array => [1,2,3] } }; 
#  ---^ 
$hash_ref->{ of_hash }{ of_array }[ 2 ]; # value is '3' 
#  ---^ 
関連する問題