从map执行两个方法

时间:2014-06-16 05:00:59

标签: ruby arrays map

我有以下代码:

require "ostruct"
arguments = [OpenStruct.new({:name=>"ABCD",    :city => "Delhi"}), 
             OpenStruct.new({:name=>"Awesome", :city => "Bhiwandi"}),
             OpenStruct.new({:name=>"good",    :city => "Chandigarh"})]
arguments.map(&:name)
#results ["ABCD", "Awesome", "good"]  

但我想要的是:

[["ABCD", "Delhi"], ["Awesome", "Bhiwandi"], ["good", "Chandigarh"]]

我可以通过以下方式获得:

 arguments.map(&:name).zip(arguments.map(&:city))

但是,是否有一些更优雅的方法,例如arguments.map(&[:name, :city]).

2 个答案:

答案 0 :(得分:5)

我认为它不是更优雅,但是:arguments.map { |a| [a[:name], a[:city]] }

您应该在https://codereview.stackexchange.com/

上发布此类问题

答案 1 :(得分:4)

一种方式:

arguments.map { |o| [o.name, o.city] }
  #=> [["ABCD", "Delhi"], ["Awesome", "Bhiwandi"], ["good", "Chandigarh"]]