【问题标题】:Ruby Array Elements MergingRuby 数组元素合并
【发布时间】:2017-01-31 18:40:32
【问题描述】:

只是想知道是否有其他替代方法可以将数组中的元素从

[[“时间”,“2016 年 10 月 1 日”],[“消息”,“测试消息”], [“主机”,“本地主机”]]

["time=Oct-1-2016","message=test message","host=localhost"]

我已经确定了array.map {|k,v| "#{k}=#{v}"},只是想知道是否有其他方法可以在不使用地图功能的情况下实现上述目标?谢谢哟!

【问题讨论】:

  • 仍然使用map 你也可以:arr.map {|s| s.join('=')}
  • 是的,我确实把 k,v 部分煮过头了 - 谢谢@sagrpandya82
  • 当然:[ ["time","Oct-1-2016"], ["message","test message"], ["host","localhost"] ].each_with_object([]) { |a,b| b << a.join('=') },但比简单的map更麻烦。
  • 当您添加“不使用地图功能”之类的愚蠢要求时,您需要解释原因,因为答案可能会有所不同。 “我正在学习,我们不应该使用它”,“我是 Haskell 幸存者,这三个并排的字母让我更加恼火”,“我重新定义了 map 以始终返回 false 和我需要帮助栀子花把我的奶嘴当作人质”有截然不同的反应。 map 是工作的最佳工具;因此,如果没有它,您将面临障碍。
  • 如果你的最终目标是生成一个查询字符串,并且由于你已经标记了这个 Rails,你可能会对 ActiveSupport 与Hash 混合的to_param 感兴趣:array.to_h.to_param => "host=localhost&message=test+message&time=Oct-1-2016"。否则,完全不清楚为什么要对您的问题施加“不使用map”之类的限制。

标签: arrays ruby ruby-on-rails-3


【解决方案1】:

假设您的数组是a。然后试试这个解决方案:

[1] pry(main)> a = [ ["time","Oct-1-2016"], ["message","test message"], ["host","localhost"] ]
=> [["time", "Oct-1-2016"], ["message", "test message"], ["host", "localhost"]]

[2] pry(main)> a.map{|k, v| "#{k}=#{v}"}
=> ["time=Oct-1-2016", "message=test message", "host=localhost"]

嗯,我不知道为什么 map 不适合你,但这里有一个 inject 的例子:

[40] pry(main)> a.inject(Array.new){|acc, el| acc << el.join("="); acc}
=> ["time=Oct-1-2016", "message=test message", "host=localhost"]

【讨论】:

  • 感谢@retgoat 的尝试,我正在寻找除使用 map 函数之外的替代方法来实现 [2] 中的结果。
  • @b1geyedeer 我又添加了一个示例。希望这对你有用。
  • 谢谢,这是一个不错的选择,只是为了记录地图的工作,但正如我所提到的,我想知道除了地图之外是否还有其他方法可以实现相同的输出。对不起,如果我让每个人都生气了。
  • 别担心,伙计:)我很高兴能帮上忙。
【解决方案2】:

这是在Enumerator 中使用无限循环和使用cycle 方法的一种方法。然后使用enum.take arr.size 将所有新元素放入一个数组中。

arr = [ ["time","Oct-1-2016"], ["message","test message"], ["host","localhost"] ]
ar  = arr.cycle

enum = Enumerator.new do |y|
  loop do
    y << ar.next.join('=')
  end
end

enum.take arr.size
#=> ["time=Oct-1-2016", "message=test message", "host=localhost"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多