Suchen in einer Struktur

19/07/2010 - 16:01 von Nils Müller | Report spam
Mahlzeit,

ich habe folgende Struktur erstellt:
(Wert kann dabei 0,1 oder 2 sein)

#$VAR1 = {
# 'gruppe1' => {
# 'name1' => 'Wert',
# 'name2' => 'Wert',
# 'name3' => 'Wert'
# },
# 'gruppe2' => {
# 'name1' => 'Wert'
# }
# };


Nun möchte ich z.B. für Gruppe1 wissen ob alle Namen den Wert "zwei" besitzen
oder ob es auch Namen gibt die den Wert "eins" oder "null" haben. Mich
interessiert dabei nicht welcher Name welcher Wert zugewiesen worden ist.

Bisher überprüfe ich dass in einer Schleife. Diese Lösung finde ich allerdings
ziemlich umstàndlich und umso lànger die Listen werden :-(

Gibt es eine schnellere Lösung?
 

Lesen sie die antworten

#1 Wolf Behrenhoff
19/07/2010 - 16:26 | Warnen spam
On 19.07.2010 16:01, Nils Müller wrote:
Mahlzeit,

ich habe folgende Struktur erstellt:
(Wert kann dabei 0,1 oder 2 sein)

#$VAR1 = {
# 'gruppe1' => {
# 'name1' => 'Wert',
# 'name2' => 'Wert',
# 'name3' => 'Wert'
# },
# 'gruppe2' => {
# 'name1' => 'Wert'
# }
# };


Nun möchte ich z.B. für Gruppe1 wissen ob alle Namen den Wert "zwei" besitzen
oder ob es auch Namen gibt die den Wert "eins" oder "null" haben. Mich
interessiert dabei nicht welcher Name welcher Wert zugewiesen worden ist.

Bisher überprüfe ich dass in einer Schleife. Diese Lösung finde ich allerdings
ziemlich umstàndlich und umso lànger die Listen werden :-(



Bei dieser Datenstruktur geht das aber nicht schneller. Ein Hash ist
nicht nach Werten sortiert - du musst dir aber alle Werte anschauen, um
deine Frage zu beantworten.

Machst zu solche Zugriffe hàufiger, kannst du natürlich einen Hash mit
den Werten des Testhashes als Keys des neuen Hashes erzeugen. Also z.B.

my %gruppe1test;
@gruppe1test{values %{$VAR1->{'gruppe1'}}}=();
for (qw(eins zwei drei Wert)) {
print exists $gruppe1test{$_} ? "hat $_" : "hat $_ nicht";
}

Bei mehrmaligem Gebrauch wird es so schneller.

Wolf

Ähnliche fragen