44

これは私の配列です:

array = [:one,:two,:three]

to_sメソッドをすべての配列要素に適用して取得したいと考えていますarray = ['one','two','three']

どうすればこれを行うことができますか(列挙可能な各要素を別のものに変換します)?

4

4 に答える 4

79

これはうまくいきます:

array.map!(&:to_s)
于 2011-06-27T18:01:33.723 に答える
19

mapまたはそれぞれを使用できますmap!。最初のリストは新しいリストを返し、2 番目のリストはその場で変更します。

>> array = [:one,:two,:three]
=> [:one, :two, :three]

>> array.map{ |x| x.to_s }
=> ["one", "two", "three"]
于 2011-06-27T18:01:41.923 に答える
16

オブジェクトの配列がある場合は、次のように、別の呼び出し元を持つメソッドに個別に渡したいことに注意してください。

# erb
<% strings = %w{ cat dog mouse rabbit } %>
<% strings.each do |string| %>
  <%= t string %>
<% end %>

このmethod方法をブロック展開動作と組み合わせて使用​​すると、次のように簡略化できます。

<%= strings.map(&method(:t)).join(' ') %>

慣れていない場合はmethod、渡されたシンボルに関連付けられたメソッドを Proc にカプセル化し、それを返します。mapアンパサンドは、この Proc をブロックに展開し、非常にうまく渡されます。の戻り値mapは配列であり、おそらくもう少し適切にフォーマットする必要があるため、join.

注意点は、 と同様にSymbol#to_proc、ヘルパー メソッドに引数を渡すことができないことです。

于 2011-07-27T15:51:00.503 に答える
8
  • array.map!(&:to_s)元の配列を次のように変更します['one','two','three']
  • array.map(&:to_s)配列を返します['one','two','three']
于 2011-06-27T18:04:36.143 に答える