2013-02-18 43 views
-6
1) %hash = (
    1 => 'a', 
    4 => 'g', 
    7 => 'h' 

);如何在不使用內置函數的情況下在Perl中反轉散列?

將WAP反向給定的哈希而不使用反向函數?

+2

自己寫作業。 – nothrow 2013-02-18 09:54:18

+0

爲什麼這個奇怪的限制? – Zaid 2013-02-18 09:54:40

+3

你想如何處理重複值?例如。如果'1 =>'a''和'11 =>'a'',那麼只有其中一個將成爲一個鍵,例如, ''a'=> 11' – TLP 2013-02-18 10:06:12

回答

2

你真的應該學習Perl - 當你自己學習Perl時,它真的很有趣。

這是真的那麼簡單:

my %rev; 
foreach my $key (keys %hash) { 
    $rev{$hash{$key}} = $key; 
} 
+0

我不想交換值和鍵。我只是想要像這樣\ n%\ n%hash =( 7 =>'h' 4 =>'g', 1 =>'a', ); – Anon30 2013-02-18 10:58:38

+1

這是不可能的。 Perl中的哈希不是按照定義排序的。順便說一下,這段代碼相當於嵌入式的「反向」功能。 – mvp 2013-02-18 11:00:56

+0

@WaseemShaikh您無法對散列進行排序。或者說,您可以對其鍵和值進行排序,但不能在散列本身中存儲排序順序。如果您想按特定順序輸入密鑰,請使用數組。例如。 '我的@ = qw(7 4 1)'。 – TLP 2013-02-18 11:20:50

0

TIMTOWTDI:

my %a = (foo => 1, bar => 2); # original hash 
my @a = %a;      # copy to array 
my @rev;       # reversed list container 
push @rev, pop @a while @a;  # fill @rev from the back forward 
my %rev = @rev;     # assign reversed list to hash 
0

TIMTOWTDI II:

my %rev = 
    map {$hash{$_} => $_} 
     keys %hash; 
0
my %by_letter; 
@by_letter{ values(%by_num) } = keys(%by_num); 

my %by_letter = map { $by_num{$_} => $_ } keys(%by_num); 
相關問題