1. ホーム
  2. ruby

[解決済み] Rubyのmapとcollectの違い?

2022-03-21 23:10:59

質問

ググってみたところ、様々な意見や矛盾した意見がありました。 mapcollect Ruby/Railsで配列の上に?

は、その ドキュメント は、特に示唆していないようですが、もしかしたら、方法や性能に違いがあるのでしょうか?

解決方法は?

違いはありません。 map は、C言語では rb_ary_collectenum_collect (例) map は配列でも他の列挙型でも変わりませんが mapcollect ).


なぜ両方なのか mapcollect はRubyに存在するのか? は、その map 関数は、言語によって多くの命名規則があります。 ウィキペディアに概要が掲載されています :

Map関数は関数型プログラミング言語に由来するが、今日では多くの手続き型言語、オブジェクト指向言語、マルチパラダイム言語でもサポートされている(あるいは定義されている場合がある)。C++の標準テンプレートライブラリでは、この関数は transform C#(3.0)のLINQライブラリでは、拡張メソッドとして Select . Map は Perl、Python、Ruby などの高級言語でも頻繁に使用される操作で、その操作名は map は、これら3つの言語すべてにおいて A collect map のエイリアスは Ruby でも提供されています(Smalltalk から)。 [強調]。Common Lispには、mapに似た関数群があり、ここで説明した動作に対応するものは mapcar (-carはCAR操作によるアクセスを示す)。

RubyはSmalltalkの世界から来たプログラマがよりくつろげるようなエイリアスを提供します。


配列とenumで実装が異なるのはなぜですか? 列挙型は一般化された反復構造であり、Ruby では次の要素が何であるかを予測することはできません(無限列挙型を定義することが可能です。 プライム を使用します(例)。したがって、連続する各要素を取得するために関数を呼び出す必要があります(通常、これは each メソッド)。

配列は最も一般的なコレクションなので、そのパフォーマンスを最適化するのは妥当なことです。Ruby は配列がどのように動くかについてよく知っているので、わざわざ each を使用することができますが、単純な ポインタ操作 の方が圧倒的に高速です。

のような多くのArrayメソッドにも同様の最適化が存在します。 zip または count .