Perl中的grep和map有什么区别?

Nat*_*man 14 perl grep map

在Perl中grep,map取一个表达式和一个列表,并计算列表中每个元素的表达式.

两者有什么区别?

Gre*_*ill 26

grep返回原始列表中与表达式匹配的元素,同时map返回应用于原始列表的每个元素的表达式的结果.

$ perl -le 'print join " ", grep $_ & 1, (1, 2, 3, 4, 5)'
1 3 5
$ perl -le 'print join " ", map $_ & 1, (1, 2, 3, 4, 5)'
1 0 1 0 1
Run Code Online (Sandbox Code Playgroud)

第一个示例打印列表中的所有奇数元素,而第二个示例打印0或1,具体取决于相应的元素是否为奇数.


FMc*_*FMc 10

我发现思考grep()map()以最一般的形式思考是有帮助的:

grep {BLOCK} LIST   
map  {BLOCK} LIST
Run Code Online (Sandbox Code Playgroud)

grep() 是一个过滤器:它返回LIST中BLOCK返回true的项子集.

map()是一个映射函数:将一个值从LIST发送到BLOCK,BLOCK返回一个包含0个或更多值的列表; 所有这些BLOCK调用的组合集将是返回的最终列表map().