0

私はルビーについてほとんど知りません、私の次の実装はうまくいきます、しかし私はアプローチが抑制されていると本当に感じます

@surfaces = []
Surface.all.each do |surface|
    @surfaces << surface.name
end

目的は、各サーフェスオブジェクトの名前の値を抽出し、それらを配列に形成することです。これを行うための賢い方法を教えてもらえますか?ありがとう

4

3 に答える 3

3

を使用できますSurface.all.collect(&:name)

編集:これは次のようなことをするのと同じです:

Surface.all.collect do |s|
  s.name
end
于 2012-12-29T12:25:09.047 に答える
2

要素の1対1のマッピングを使用Enumerable#mapして、ある列挙型を別の列挙型に変換するために使用します。Symbol#to_procマッピングに、列挙可能な入力の各要素で単一のメソッドを呼び出すだけの場合と組み合わせます。

これらは両方とも同等です。

@surfaces = Surface.all.map(&:name)

@surfaces = Surface.all.map do |surface|
  surface.name
end
于 2012-12-29T12:25:41.667 に答える
1

参考までに、エイリアスを収集して、Rubyの同じ内部パターンにマップします。

スタックフローのリファレンスは次のとおりです。Rubyでのマップと収集の違いは?

于 2012-12-29T19:39:02.023 に答える