2011-03-04 31 views
4

請原諒我,如果這已被問到,我找不到它。Ruby:對象數組中的一個值的新數組

我有對象的數組,如:

[<#Folder id:1, name:'Foo', display_order: 1>, 
<#Folder id:1, name:'Bar', display_order: 2>, 
<#Folder id:1, name:'Baz', display_order: 3>] 

我想這個數組轉換爲數組剛的名字,比如:

['Foo','Bar','Baz'] 

和,雖然我」如果我可以使用相同的技術從兩個參數中創建一個數組,那麼它會很好,即名稱和顯示順序如下所示:

[['Foo',1],['Bar',2],['Baz',3]] 

做這種事最好的'Ruby Way'是什麼?

謝謝!

+0

感謝很多答案! htanata's是最完整的。 – Andrew 2011-03-04 16:00:43

+0

+1爲您的功能編程的第一步。 – 2011-03-06 22:25:37

回答

11

這些怎麼樣?

# ['Foo','Bar','Baz'] 
array = folders.map { |f| f.name } 
# This does the same, but only works on Rails or Ruby 1.8.7 and above. 
array = folders.map(&:name) 

# [['Foo',1],['Bar',2],['Baz',3]] 
array = folders.map { |f| [f.name, f.display_order] } 
+0

完美,謝謝你的明確解釋和例子。 – Andrew 2011-03-04 16:01:01

+1

爲了澄清,'f.map(&:name)'在1.8.7和(至少)1.9.2不帶Rails的情況下工作。 – pilcrow 2011-03-04 16:12:05

+0

更新了Ruby版本。謝謝@pilcrow – htanata 2011-03-04 16:46:59

2

如何:

a.collect {|f| f.name} 
+0

或者如果你真的想替換它,請使用'a.collect!'。對於第二個問題:Hust把它擴展到'a.collect {| f | [f.name,f.display_order]}' – 2011-03-04 15:48:03

0

你可以做

array.map { |a| [a.name, a.display_order] } 
0

要獲得['Foo','Bar','Baz'],你可以這樣做:array.map(&:name)

對於第二個,你可以使用array.map {|a| [a.id, a.name] }

相關問題