grep soll werte aus Hash nehmen.
MrSpoocy
- perl
Hi,
ich habe einen hash der wie folgt aufgebaut ist:
my %hash = {};
$hash{"xy_0_abc"} = "wert1";
$hash{"xy_0_def"} = "wert2";
$hash{"xy_0_ghi"} = "wert3";
$hash{"xy_1_cba"} = "wert11";
$hash{"xy_1_def"} = "wert22";
$hash{"xy_1_ihj"} = "wert33";
$hash{"xy_2_hjk"} = "wert12";
$hash{"xy_2_ahl"} = "wert23";
$hash{"xy_2_xyz"} = "wert34";
nun möchte ich mit hilfe von Grep einen neuen Hash erzeugen der dann wie folgt aussieht (unterberücksichtiegung das ich eine nummer vorgebe welche mit dem oberem hash übereinstimmt):
my $nummer = 1;
$newHash{"cba"} = "wert11";
$newHash{"def"} = "wert22";
$newHash{"ihj"} = "wert33";
Ich dachte da an sowas wie:
my %newHash = grep (/^xy_$nummer_(.+)/,keys(%hash));
Das geht natürlich noch nicht, aber genau darum frag ich euch ja :)
Würde mich über hilfe freuen,
mfg Spoocy
ich habe einen hash der wie folgt aufgebaut ist:
Bevor du rumdoktorst. Die Bezeichnung deiner Schlüssel deutet daraufhin, dass du eigentlich eine andere Struktur möchtest. Mit Perl kannst du sehr flexible Datenstrukturen aufbauen, sie sind aber nicht so einfach zu verstehen. In der Doku sind dazu dise nützlichen Kapitel perllol und perldsc. (aber zugegeben für einen Anfänger z.T. eine harte Nuss)
$hash{"xy_0_abc"} = "wert1";
$hash{"xy_0_def"} = "wert2";
$hash{"xy_0_ghi"} = "wert3";$hash{"xy_1_cba"} = "wert11";
$hash{"xy_1_def"} = "wert22";
$hash{"xy_1_ihj"} = "wert33";$hash{"xy_2_hjk"} = "wert12";
$hash{"xy_2_ahl"} = "wert23";
$hash{"xy_2_xyz"} = "wert34";[/code]
Das sieht nach einer Liste mit Listen aus. In etwa sowas:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my $hash = {
xy => [
{
abc => 'wert1',
def => 'wert2',
ghi => 'wert3'
},
{
cba => 'wert11',
def => 'wert22',
ihl => 'wert33'
},
{
hjk => 'wert12',
ahl => 'wert23',
xyz => 'wert34'
},
]
};
print Dumper $hash;
my $nummer = 1;
print Dumper $hash->{xy}[$nummer];
Struppi.
Das sieht nach einer Liste mit Listen aus. In etwa sowas:
Nur bevor einer rumkrakeelt, das ist natürlich keine Liste mit Listen, sondern Array of Hashes.
Struppi.
schau dir mal hkgrep() an
http://www.perlmonks.org/?node_id=724308
um die keynamenz ändern msstest du noch ein array @new_filtered_keys im hashslice einsetzen.
Cheers
Lanx
schau dir mal hkgrep() an
http://www.perlmonks.org/?node_id=724308
um die keynamenz ändern msstest du noch ein array @new_filtered_keys im hashslice einsetzen.
Cheers
Lanx
Erlich gesagt iat das keine Liste in einer Liste, die sieht zwar so aufgebaut aus aber es ist wirklich nur 1 Liste deren Key wie eine 2te Liste ausseiht.
Erlich gesagt iat das keine Liste in einer Liste, die sieht zwar so aufgebaut aus aber es ist wirklich nur 1 Liste deren Key wie eine 2te Liste ausseiht.
???
Ehrlich gesagt, hkgrep() gibt dir ein hash zurück das nur die gegreppten keys enthält, was ungefähr deine Frage war. Ob das Hash verschachtelt ist, ist nebensächlich.