Thường hữu ích khi triển khai các thuật toán bằng cách sử dụng các phép toán mảng lồng nhau. Ví dụ, để tìm ra số từ trong một danh sách bắt đầu với mỗi nhân vật nhất định, bạn có thể làm điều gì đó như thế này trong Python:
>>> 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]
Trong biểu w.startswith(c)
nó là tầm thường để phân biệt giữa hai biến vòng lặp w
và c
vì chúng có tên khác nhau.
Trong Perl, tôi muốn làm một cái gì đó như thế này:
@a = ("foo", "bar", "baz");
map length(grep $_ =~ /^$_/, @a), ('a','b','c','d','e','f')
Tuy nhiên, vấn đề rõ ràng với điều này là $_
chỉ đề cập đến các trong cùng biến grep
lặp (thích hợp cho các $_
trên bên trái), không phải dành cho bên ngoài map
(thích hợp cho /^$_/
). Cách thành ngữ để tránh vấn đề này trong Perl là gì?
Tuyệt vời, mà hiện nó. Cảm ơn cũng cho lời nhắc sử dụng vô hướng thay vì chiều dài! –
tuyệt vời tuyệt vời tuyệt vời – run