Inhalt eines Arrays filtern nach Inhalt eines anderen Arrays?
Nemesis
- perl
0 Beat
Hallo zusammen,
ich habe mal eine Frage. Und zwar versuche ich im Moment bestimmte Einträge aus einem Array zu filtern. Da sich aber erst zur Laufzeit ergibt wonach ich filtere, möchte ich das Array durchsuchen, nach dem Inhalt eines anderen Arrays.
Das ist viel zu wirr, ich versuche mich mal an einem Beispiel:
@contentarray = ('C:\Docs\Blubb',
'C:\abcd\Datei',
'C:\Docs\Dataa',
'C:\Docs\Datab')
@searcharray = ('Docs',
'Umls',
'vies')
Also, ich möchte in dem @contentarray die einzelnen Einträge filtern nach den Stichworten in @searcharray. Ich hatte folgende Idee:
foreach(@searcharray)
{
my $buffer = $_;
print grep /$buffer/i,@contentarray."\n";
}
Allerdings bekomme ich bei der Variante nicht das gewünschte Ergebnis. Es scheint als würde die Version von mir immer nur nach dem letzten Eintrag aus @searcharray filtern. Und nicht nach allen darin befindlichen.
Hat jemand eine Idee wie ich das realisieren kann, oder vielleicht so etwas schonmal gemacht. Ich bräuchte echt Hilfe.
Vielen Dank,
Julian
Also, ich möchte in dem @contentarray die einzelnen Einträge filtern nach den Stichworten in @searcharray. Ich hatte folgende Idee:
foreach(@searcharray)
{
my $buffer = $_;
print grep /$buffer/i,@contentarray."\n";
was ergibt das : @contentarray."\n"
Manchmal sind Klammern nützlich.
}
>
> Allerdings bekomme ich bei der Variante nicht das gewünschte Ergebnis. Es scheint als würde die Version von mir immer nur nach dem letzten Eintrag aus @searcharray filtern. Und nicht nach allen darin befindlichen.
>
> Hat jemand eine Idee wie ich das realisieren kann, oder vielleicht so etwas schonmal gemacht. Ich bräuchte echt Hilfe.
Wenn es dir möglich ist, verwende Hashes statt Arrays.
Einen Hashkey kannst du direkt abfragen.
Einziger Nachteil: Die Reihenfolge ist nicht garantiert.
my %sh=('Docs'=>1,'Umls'=>1,'vies'=>1,);
foreach( @ca ){
$\_ =~ !C:/(\w+)! and exists $sh($1) or next;
# mach was
#...
}
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische