【问题标题】:Ruby: new array from one value in an array of objectsRuby:来自对象数组中的一个值的新数组
【发布时间】:2011-03-04 15:42:37
【问题描述】:

如果这已经被问到了,请原谅我找不到它。

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

[<#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 方式”是什么?

谢谢!

【问题讨论】:

  • 感谢您的众多回答! htanata's 是最完整的。
  • +1 为您迈向函数式编程的第一步。

标签: ruby arrays object


【解决方案1】:

这些怎么样?

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

【讨论】:

  • 澄清一下,f.map(&amp;:name) 在 1.8.7 和(至少)1.9.2 中可以在没有 Rails 的情况下工作。
  • 更新了 Ruby 版本。谢谢@pilcrow
【解决方案2】:

怎么样:

a.collect {|f| f.name}

【讨论】:

  • 如果你真的想替换它,请使用a.collect!。对于第二个问题:Hust 将其扩展为 a.collect{|f| [f.name, f.display_order]}
【解决方案3】:

你可以的

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

【讨论】:

    【解决方案4】:

    要获取['Foo','Bar','Baz'],可以这样做:array.map(&amp;:name)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多