違いはありません。実際map
、Cとrb_ary_collect
and として実装されていますenum_collect
(たとえばmap
、配列と他の列挙型の間には違いがありますが、との間には違いはmap
ありませんcollect
)。
なぜ両方を行うmap
とcollect
Rubyで存在しますか?map
機能は、異なる言語で、多くの命名規則があります。ウィキペディアは概要を提供します:
map関数は関数型プログラミング言語で作成されましたが、今日では多くの手続き型、オブジェクト指向、マルチパラダイム言語でもサポートされています(または定義される可能性があります)。C++の標準テンプレートライブラリではtransform
、C#(3.0)ではと呼ばれています。 LINQライブラリは、という拡張メソッドとして提供されSelect
ます。マップは、Perl、Python、Rubyなどの高級言語で頻繁に使用される操作でもあります。操作はmap
、これらの3つの言語すべてで呼び出されます。マップのcollect
エイリアスもRuby(Smalltalkから)で提供されています [強調は私のもの]。Common Lispはマップのような関数のファミリーを提供します。ここで説明する動作に対応するものを呼び出しますmapcar
(-car は、CAR操作を使用したアクセスを示します)。
Rubyは、Smalltalkのプログラマーがよりくつろげるようにするためのエイリアスを提供します。
配列と列挙型の実装が異なるのはなぜですか?enumは一般化された反復構造です。つまり、Rubyが次の要素が何であるかを予測する方法はありません(無限のenumを定義できます。例についてはPrimeを参照してください)。したがって、連続する各要素を取得するために関数を呼び出す必要があります(通常、これはeach
メソッドになります)。
配列は最も一般的なコレクションであるため、パフォーマンスを最適化することは妥当です。Rubyは配列がどのように機能するかについて多くを知っているので、呼び出す必要はありませんが、非常に高速each
な単純なポインター操作しか使用できません。
同様の最適化は、zip
またはのような多くの配列メソッドに対して存在しcount
ます。
map
Code Golfでは推奨されています。