
[code]

    def hoge(array)
      res = []
      array.each do |data|
        value = data.fuga
        res << value
      end
      res
    end
    
[/code]

こういうことをやってしまうのですが、2行目と5行目と7行目がrubyっぽくないように感じます。

mapなどを使える場面はもっとすっきりかけますが、そうでない時、どうやって書けばrubyらしいでしょうか。


CC BY-SA 3.0
2015-12-18T15:50:06.663
20160
2018-11-11T14:13:58.577
9149
question
ruby
返り値用の配列に追加するコード


`map` が使えないようなシーンだと、`array.inject([]) { |r, d| r + [d.fuga] }`
のように書くことができます。(今回の場合は単純に `array.map(&:fuga)` と書けますが。)

`inject` や `map` では複雑になる場合、泥臭く書く方が良いかもしれません。


CC BY-SA 3.0
2015-12-18T17:37:31.277
20161
2015-12-18T17:37:31.277
76
20160
answer


こんな感じで書くのはどうですか？

[code]

    def hoge(array)
      array.map do |data|
        data.fuga
      end
    end
    
[/code]

参考までに、同じようなサンプルコードで、文字列の配列を数値の配列に変換するコードを書いてみました。

[code]

    def hoge(array)
      array.map do |data|
        data.to_i
      end
    end
    
    array = %w(1 2 3 4 5)
    p hoge(array)
    # => [1, 2, 3, 4, 5]
    
[/code]


CC BY-SA 3.0
2015-12-19T01:08:32.917
20166
2015-12-19T01:21:33.390
2015-12-19T01:21:33.390
85
85
20160
answer


上の回答とほとんど一緒ですが自分はこんな感じで書いてます↓

[code]

    def hoge(array)
      array.inject([]) do |r, d|
        r += d.fuga
      end
    end
    
[/code]


CC BY-SA 3.0
2016-01-18T02:07:34.257
21016
2016-01-18T02:07:34.257
10851
20160
answer

[code]

    def hoge(array)
      array.map{ |data| data.fuga }
    end
    
[/code]


CC BY-SA 4.0
2018-11-11T14:13:58.577
50215
2018-11-11T14:13:58.577
30913
20160
answer