2008-10-10 5 views
24

, 나는 같은 키를 다른 해시에 여러 값을 저장했습니다 :Perl 해시 테이블에 여러 값을 저장하려면 어떻게해야합니까? 다음과 같이 최근까지

%boss = (
    "Allan" => "George", 
    "Bob" => "George", 
    "George" => "lisa"); 

%status = (
    "Allan" => "Contractor", 
    "Bob" => "Part-time", 
    "George" => "Full-time"); 

및 특성 각 키의 많은이 있다면 그때 $boss("Bob")$status("Bob")를 참조 할 수 있지만,이 다루기 힘든 도착 가질 수 있고 해시를 동기화 상태로 유지하는 것에 대해 걱정해야합니다.

해시에 여러 값을 저장하는 더 좋은 방법이 있습니까? 값을

 "Bob" => "George:Part-time" 

으로 저장 한 다음 분할하여 문자열을 디스 어셈블 할 수 있지만보다 세련된 방법이 있어야합니다.

+1

이것은 왜 Perl 데이터 구조용 요리 책이 훌륭한 리소스인지를 상기시켜줍니다. – dreftymac

답변

26

perldoc perldsc과 같은 표준 방식입니다.

~> more test.pl 
%chums = ("Allan" => {"Boss" => "George", "Status" => "Contractor"}, 
      "Bob" => {"Boss" => "Peter", "Status" => "Part-time"}); 

print $chums{"Allan"}{"Boss"}."\n"; 
print $chums{"Bob"}{"Boss"}."\n"; 
print $chums{"Bob"}{"Status"}."\n"; 
$chums{"Bob"}{"Wife"} = "Pam"; 
print $chums{"Bob"}{"Wife"}."\n"; 

~> perl test.pl 
George 
Peter 
Part-time 
Pam 
+0

괜찮아 보이는군요. 나는 $ chums { "Greg"} = { "Boss"=> "Lisa", "Status"= "Fired"}로 다른 친구를 추가 할 수 있다고 생각하지만 Bob에게 아내를 추가하려면 어떻게해야합니까? 그게 $ chums { "Bob"} { "Wife"} = "Carol"일까요? – paxdiablo

+0

또한 왜 "->". 이것들 없이는 기능하는 것처럼 보입니다. – paxdiablo

+2

TIMTOWDI :) 그들 없이도 사용할 수 있습니다. 예, 아내를 추가하는 방법은 정확합니다. –

3

해시에는 다른 해시 또는 배열이 포함될 수 있습니다. 이름으로 속성을 참조하려면 키마다 해시로 저장하거나 그렇지 않으면 키당 배열로 저장하십시오.

reference for the syntax이 있습니다.

2
my %employees = (
    "Allan" => { "Boss" => "George", "Status" => "Contractor" }, 
); 

print $employees{"Allan"}{"Boss"}, "\n"; 
23

해시 중 해시는 명시 적으로 요청하는 것입니다. 이 설명서를 다루는 튜토리얼 스타일의 문서 부분이 있습니다. Data Structure Cookbook하지만 어쩌면 객체 지향을 고려해야합니다. 이것은 객체 지향 프로그래밍 튜토리얼에 대한 고정 관례의 일종입니다.

어떻게 이런 일에 대해 :

#!/usr/bin/perl 
package Employee; 
use Moose; 
has 'name' => (is => 'rw', isa => 'Str'); 

# should really use a Status class 
has 'status' => (is => 'rw', isa => 'Str'); 

has 'superior' => (
    is  => 'rw', 
    isa  => 'Employee', 
    default => undef, 
); 

############### 
package main; 
use strict; 
use warnings; 

my %employees; # maybe use a class for this, too 

$employees{George} = Employee->new(
    name => 'George', 
    status => 'Boss', 
); 

$employees{Allan} = Employee->new(
    name  => 'Allan', 
    status => 'Contractor', 
    superior => $employees{George}, 
); 

print $employees{Allan}->superior->name, "\n"; 
+2

이것은 앞으로 향상 될 수있는 이점이 있습니다. –

0

%의 CHUMS = ("앨런"=> { "보스"=> "조지", "상태"=> "계약자"}, "밥" => { "보스"=> "피터", "상태"=> "파트 타임"});

잘 작동하지만 데이터를 입력하는 빠른 방법이 있습니까?

내가

퍼센트의 CHUMS 같은 것을 생각하고 = (QW, 배) (앨런 보스 조지 상태 계약자 밥 보스 피터 상태 파트 타임)

경우 보조 키의 X = 수 후 기본 키 (이 경우 x = 2, "Boss"및 "Status")