2011-06-27 54 views
34

這是我的數組:Apply方法在陣列/每個元素枚舉

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

我想申請to_s方法我所有的數組元素得到array = ['one','two','three']

我該怎麼做(把enumerable的每個元素轉換成其他東西)?

+0

可能重複[在Ruby中將整數數組轉換爲字符串數組](http://stackoverflow.com/questions/781054/convert-an-array-of-integers-into-an-array-字符串中的紅寶石) – Nakilon

回答

57

這將工作:

array.map!(&:to_s) 
+2

array.map!(&:to_s) - 在1.8版本中不會使用這個工作嗎? –

+0

它確實在Ruby 1.8.7中有效。我把它用在我的項目中。 –

+0

Symbol#to_proc在1.8.6中不可用,但在1.8.7中可用:http://apidock.com/ruby/Symbol/to_proc。我也從個人經驗中瞭解到這一點,因爲我不使用Rails或其庫。 –

15

您可以分別使用mapmap!,首先會返回一個新的列表,第二個修改列表就地:

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

>> array.map{ |x| x.to_s } 
=> ["one", "two", "three"] 
+0

感謝您的快速和詳細的答案! –

7
  • array.map!(&:to_s)將原始數組修改爲['one','two','three']
  • array.map(&:to_s)返回陣列y ['one','two','three']
+0

@sawa:其實並非如此。 Ruby-On-Rails實際上是一種編程語言,與Ruby有關的問題更多。但就像Perl,CLU和SmallTalk一樣,Ruby已經將其最好的一部分融合到了它的語言中。 ;)http://xkcd.com/386/ –

+0

@Andrew好吧。謝謝。在你給出一些之前,我刪除了我的評論。 – sawa

+0

對於那些想知道我在幽默地回答什麼的人,@sawa基本上問了回答者是否知道Ruby是一種語言,並且Rails是一個運行在Ruby上的框架,因爲@sawa認爲Symbol#to_proc僅僅是Rails 1.8 0.7。 –

15

值得一提的是,如果你有對象的數組,你要單獨進入的方法有不同的來電者,像這樣:

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

您可以使用method方法與塊擴展相結合行爲簡化:

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

如果你不熟悉,什麼method確實是封裝與傳遞給它的一個Proc符號相關聯的方法,並返回它。 &符將這個Proc擴展成一個塊,它很好地傳遞給mapmap的返回是一個數組,我們可能想要更好地格式化它,因此join

需要注意的是,與Symbol#to_proc一樣,您不能將參數傳遞給輔助方法。

+0

謝謝,這真是一個不錯的訣竅! – antinome