Test, wenn ein hash-Schlüssel vorhanden ist, und drucken Sie die Werte der Hash in perl
Wenn ein Schlüssel in einem array, ich will zu drucken, die Schlüssel und die Werte aus der hash. Hier ist der code, den ich schrieb.
for($i=0;$i<@array.length;$i++)
{
if (exists $hash{$array[$i]})
{
print OUTPUT $array[$i],"\n";
}
}
Vom obigen code, ich bin in der Lage, drucken Sie die Tasten. Aber ich bin mir nicht sicher, wie drucken Sie die Werte der Schlüssel.
Kann mir jemand helfen?
Dank
InformationsquelleAutor I am | 2012-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
@array.length
ist syntaktisch legal, aber es ist definitiv nicht das, was Sie wollen.@array
im skalaren Kontext liefert die Anzahl der Elemente im array.Den
length
Funktion, ohne argument, gibt Sie die Länge der$_
.Den
.
- operator führt die string-Verkettung.So
@array.length
nimmt die Anzahl der Elemente in@array
und die Länge der Zeichenfolge enthalten in$_
, behandelt Sie jedoch als strings, und schließt sich Ihnen zusammen.$i < ...
legt einen numerischen Kontext, so ist es wahrscheinlich zu behandeln wie eine Zahl-aber sicher nicht die, die Sie wollen. (Wenn@array
hat 15 Elemente und$_
passiert zu 7 Zeichen lang sein, die Anzahl sollte157
, einen bedeutungslosen Wert.)Den richtigen Weg zur Berechnung der Anzahl der Elemente in
@array
ist nur@array
im skalaren Kontext -- oder, um es deutlicher,scalar @array
.Ihre Frage zu beantworten, wenn
$array[$i]
ist ein Schlüssel, die entsprechenden Wert ist$hash{$array[$i]}
.Aber ein C-Stil
for
- Schleife ist nicht die sauberste Art und Weise ein array zu Durchlaufen, vor allem, wenn Sie brauchen nur den Wert, nicht den index, auf jeder iteration.use Array::Utils qw(:all); for(intersect(@array,keys %hash)){print;}
InformationsquelleAutor Keith Thompson
Einige alternative Methoden wie die Verwendung von hash-slices:
(Für diejenigen, die gerne Golfen).
InformationsquelleAutor dan1111