Ruby:从对象数组中的一个值创建新数组

6

如果这个问题已经被问过了,那么请原谅我,我没有找到。

我有一个对象数组,例如:

[<#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]]

在IT技术中,最好的“Ruby方式”是什么?

谢谢!


感谢大家的回答!htanata的回答最为完整。 - Andrew
你迈出函数式编程的第一步,加油! - Andrew Grimm
4个回答

16

这些怎么样?

# ['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] }

1
澄清一下,在1.8.7和(至少)1.9.2中,f.map(&:name)在没有Rails的情况下也可以工作。 - pilcrow

3
如何考虑:
a.collect {|f| f.name}

对于第一个问题:如果你只是想修改数组中的元素,只需使用 a.each 或者 a.map,或者如果你真的想要替换它,可以使用 a.collect!。对于第二个问题:只需扩展一下,使用 a.collect{|f| [f.name, f.display_order]} - Simon Woker

0

你可以做到

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

0
要获取['Foo','Bar','Baz'],您可以执行:array.map(&:name) 对于第二个,您可以使用array.map {|a| [a.id, a.name] }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接