2016-05-05 7 views
2

Hallo Ich habe zwei Hashes% Vermögens &% AktivitätPerl verketten 2 Hashes basierend auf einem bestimmten Schlüssel

%Asset 
Name,Computer Name 
David,X 
Clark,Y 
Sam,Z 

%Activity 
Name,Activity 
David,A 
Clark,B 
Sam,C 
David,D 
Clark,E 
Sam,F 

Der zweite Hash hat den Namen mehrere Male wiederholt (kann mehr als 2 sein) .. Ich möchte Holen Sie sich einen Hash mit der prägnanten Information .. etwas wie

Name,Computer Name,Activity 
David,X,A&D 
Clark,Y,B&E 
Sam,Z,C&F 

meine Idee in einem Pseudo-Code Art der Art ist;

foreach (@Activity{qw[Name]}) { 
    push @Asset{qw[Name Activity]}, $Activity['Activity'] 

} 
+0

Scheint mir, Sie wollen zwei Tabellen verbinden und ein Array zurückgeben. Ich sehe keinen Hash in Ihrem (sehr verwirrenden) Pseudocode. – jira

+0

Ja, ich bin offen für die Verwendung von Arrays oder Hashes ... das eigentliche Ziel ist es, sie zu kombinieren ... der Name wäre in beiden ... – Muzammil

Antwort

2

Was Sie wollen, ist ein Hash von Hashes. Konzeptionell würden Sie alle Informationen zu einem Asset in einem einzigen Hash kombinieren.

my %dave = (
    name   => "Dave", 
    computer_name => "X", 
    activity  => "A" 
); 

Dann geht dies in einen größeren Hash aller Assets, die durch ihren Namen eingegeben werden.

$Assets{$dave{name}} = \%dave; 

Wenn Sie Daves Aktivität finden ...

print $Assets{Dave}{activity}; 

Sie können alle Informationen über Dave herausziehen und es um als Hash-Referenz übergeben.

my $dave = $Assets{Dave}; 
print $dave->{activity}; 

Diese Art von Struktur führt unweigerlich zur Modellierung Ihrer Assets als Objekte.

Sie können mehr über Hashes von Hashes in der Perl Data Structures Cookbook lernen.

+0

Die eigentliche Problemstellung ist, dass ich diese Informationen kombinieren muss .. wie erreichen Sie das effizient .. Die Hashes sind eigentlich 2 verschiedene Tabellen, aus denen ich den Hash füllen würde. Das Feld Name ist die eindeutige Sache zwischen zwei Tabellen ... Bei der zweiten Tabelle kann der Name mehrmals wiederholt werden, also müssen wir alle Instanzen sehen, sie kombinieren und sie dann in den endgültigen Hash einfügen. – Muzammil

+0

@Muzammil I ' "% Activity" hat den Namen als Schlüssel und die Aktivität als Wert wie $ Activity {David} = "A". Es kann nur einen Eintrag für jeden Namen geben, also keine Duplikate wie Sie. Aber dann macht '@Activity {qw [Name]}' keinen Sinn. Könnten Sie dies aufklären, indem Sie Ihren Post bearbeiten und die Datenstrukturen ausschreiben, die Sie im tatsächlichen Perl-Code haben? – Schwern