没什么区别,实际上map
是在C中以rb_ary_collect
和实现的enum_collect
(例如map
,数组和任何其他枚举之间都有区别,而map
和之间没有区别collect
)。
为什么都map
和collect
Ruby的存在吗?该map
函数具有许多不同语言的命名约定。维基百科提供了一个概述:
map函数起源于函数式编程语言,但今天在许多过程,面向对象和多范式语言中也受支持(或可以定义):在C ++的标准模板库中,它transform
在C#(3.0)的版本中称为。 LINQ库,它作为称为的扩展方法提供Select
。Map也是Perl,Python和Ruby等高级语言中的常用操作。这map
三种语言都会调用该操作。Ruby(来自Smalltalk) [强调矿井]中也提供了地图的collect
别名。Common Lisp提供了一系列类似地图的功能;称为与此处描述的行为相对应的行为mapcar
(-car表示使用CAR操作进行的访问)。
Ruby为Smalltalk世界的程序员提供了别名,使他们感到宾至如归。
为什么对数组和枚举有不同的实现?枚举是一种广义的迭代结构,这意味着Ruby无法预测下一个元素是什么(您可以定义无限枚举,请参阅Prime)。因此,它必须调用一个函数来获取每个连续的元素(通常是each
方法)。
数组是最常见的集合,因此合理地优化其性能。由于Ruby非常了解数组的工作原理,因此不必调用它,而each
只能使用简单的指针操作,这要快得多。
对于许多类似zip
或的Array方法,也存在类似的优化方法count
。
map
是Code Golf的首选。