【问题标题】:Executing two methods from map从地图执行两个方法
【发布时间】:2014-08-05 21:02:17
【问题描述】:

我有以下代码:

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]).

【问题讨论】:

  • 一定要使用 OpenStruct 吗?
  • 我只是用它来提出问题,实际上,我的论点是一个活动记录关系数组。
  • 什么是"Ostruct"?它似乎不是标准库,也不是宝石。引入非标准的时候,需要说明。
  • @sawa 你认不出一个简单的错字?也许你可以尝试一下明显的“你是说require 'ostruct' 你是require 'Ostruct'吗?”
  • @saurabh 这是个坏主意,而且太慢了,..但仍然适合你arguments.map(&->(o){ [o.name, o.city] }

标签: ruby arrays map


【解决方案1】:

一种方式:

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

【讨论】:

    【解决方案2】:

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

    你应该在https://codereview.stackexchange.com/上发布这样的问题

    【讨论】:

    • 更好,但是我一直在寻找,如果我能做一些类似的事情:arguments.map(&[:name, :city])。
    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2018-07-15
    相关资源
    最近更新 更多