Es ist oft nützlich, Algorithmen mit verschachtelten Array-Operationen zu implementieren. Um zum Beispiel die Anzahl der Worte in einer Liste zu finden, die mit jedem gegebenen Zeichen beginnen, könnten Sie so etwas wie dies in Python tun:
>>> a = ["foo","bar","baz"]
>>> map(lambda c: len(filter(lambda w: w.startswith(c), a)), ('a','b','c','d','e','f'))
[0, 2, 0, 0, 0, 1]
Im Ausdruck w.startswith(c)
es ist trivial zwischen den beide Schleifeniterationslatenzzeit Variablen zu unterscheiden w
und c
weil sie unterschiedliche Namen haben.
In Perl, würde Ich mag so etwas tun:
@a = ("foo", "bar", "baz");
map length(grep $_ =~ /^$_/, @a), ('a','b','c','d','e','f')
jedoch das offensichtliche Problem dabei ist, dass $_
nur auf die auf der innerstegrep
Iterationsvariable (geeignet für die $_
bezieht sich links), nicht die für die äußere map
(passend für die /^$_/
). Was ist der idiomatische Weg, um dieses Problem in Perl zu vermeiden?
ausgezeichnet, dass es funktioniert. Danke auch für die Erinnerung, Skalar statt Länge zu verwenden! –
genial super fantastisch – run