違いはありません。実際map、Cとrb_ary_collectand として実装されていますenum_collect(たとえばmap、配列と他の列挙型の間には違いがありますが、との間には違いはmapありませんcollect)。
なぜ両方を行うmapとcollectRubyで存在しますか?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ます。
mapCode Golfでは推奨されています。