2013-05-31 3 views
4

J'ai un hachageTrier un hachage comme clés dans un tableau

%value 
g=>10 
i=>55 
k=>4 
n=>100 

J'ai un tableau

@letters = ('k','i','n','g') 

s'il vous plaît laissez-moi savoir comment trier mon hachage dans l'ordre des clés du tableau .

+1

comment voulez-vous le résultat, en tant que hachage ne conserve pas l'ordre? – user1937198

+0

puis-je stocker dans un hachage différent dans l'ordre de @letters? – user2441289

+0

Les hachages ne conservent pas l'ordre, donc si vous en avez besoin, utilisez un tableau de tableaux ou un Tie :: IxHash de cpan – user1937198

Répondre

5

Si vous souhaitez imprimer des valeurs de hachage dans l'ordre dans lequel ils apparaissent dans le tableau @letters puis,

print join ",", @value{@letters}; 
4

Code:

#!/usr/bin/perl 

use strict; 
use warnings; 
use Data::Dumper; 
use Tie::IxHash; 

my %hash = (
     g=>10, 
     i=>55, 
     k=>4, 
     n=>100, 
); 

my %sorted_hash; 
tie %sorted_hash, "Tie::IxHash"; 

my @array = ('k','i','n','g'); 
foreach(@array) 
{ 
     if(defined($hash{$_})) 
     { 
      $sorted_hash{$_} = $hash{$_}; 
     } 
} 

print Dumper(%sorted_hash); 

Prints:

$VAR1 = 'k'; 
$VAR2 = 4; 
$VAR3 = 'i'; 
$VAR4 = 55; 
$VAR5 = 'n'; 
$VAR6 = 100; 
$VAR7 = 'g'; 
$VAR8 = 10; 

Mention, que J'ai utilisé le module Tie :: ixHash. Sinon, Perl ne gardera pas les clés du tableau triées.

Ce module Perl implémente Perl hash qui préservent l'ordre dans lequel les éléments de hachage ont été ajoutés

http://metacpan.org/pod/Tie::IxHash

Questions connexes