やわらかテック読者になるやわらかテック興味のあること。業務を通して得られた発見。開発所感Rubyで開発をしていると配列からハッシュ(連想配列)を生成するコードを書くことがあります。個人的にはreduce関数を使ってバシッと書くのが気持ちよくて好きなのですが、最近、人によってこの処理の書き方が違うことに気づきました。僕が個人的に観測しているのは以下の4つの書き方(方法)です。inを使った方法each関数を使った方法each_with_object関数を使った方法reduce関数を使った方法それぞれ、簡単なコードを再現してみました。処理は非常にシンプルで配列の各要素を文字列にした値をハッシュのキーとし、各要素を2倍にした値をバリューとします。hashendでは、この4つのコードのパフォーマンスを計測してみます。計測には標準ライブラリのbenchmarkを使用しました。計測に使用したコードはこちらにて公開しているので、気になる方は覗いてみてください。0.002430)計測結果を見てみると、4つの方法の実行時間にはあまり差がないことが分かります。inが最も時間が長いようですが、内部実装に違いがあるのでしょうか。JavaScriptで連番の配列の生成速度を比較した時は逆の結果になりました。非常に興味深い結果ですが、Rubyのコードを深掘りしないと答えには辿り着けなさそうです。inもしくはwhile文を内部で呼び出していると思っていたので、each関数が最も速いという結果が出たことには驚きました。その他のeach_with_object・reduce関数はほぼ誤差なので、好みの問題というレベルでした。in以外なら好きなものを使えば良いと思います。今回はメモリ使用率やCPU負荷については計測していないのですが、この程度のデータ量であれば、大きな違いはないでしょう。チームで「この書き方にしよう」と決めれば何でも良いですね。個人的には変数宣言も不要で、汎用性が高いreduce関数を推していきます。each_with_object関数は便利ですが、このためだけに1つ関数を覚えないといけないというのが個人的には「何だかな...」と感じるポイントです。「ええな〜」と思ったらイイネ!・シェア!・はてなブックマークを頂けると励みになります。仕事でJavaScriptを書くことが多くなりました。22:23名古屋発のベンチャーでWEBアプリのバックエンドをメインに作っています。エンジニア育成やチームビルディングにもちょっとだけ携わっています。3はてなブログをはじめよう!takamizawa46さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。