【问题标题】:Adding an element to every item of an array in ruby在ruby中为数组的每个项目添加一个元素
【发布时间】:2016-09-27 04:05:05
【问题描述】:

我目前有一个输入 [['a', [0, 1]], ['b', [1]]]。我正在尝试将第一项与[0,1] 中的每个元素组合在一起,即:'a' 中的['a',[0,1] => [['a',0],['a',1],['b',1]] 就像有序对一样。我已经做到了,但它似乎过于复杂我认为可能有一种我忽略的方法。

[[0, [0, 1]], [1, [1]]].map.with_index{|x,y| x[1].map{|ele| [y,ele]}}.flatten(1)
#I used 'a'&'b' in the example to help with any confusion.

【问题讨论】:

    标签: arrays ruby combinations


    【解决方案1】:
    ▶ arr.flat_map { |e| [e.first].product(e.last) }
    #⇒ [["a", 0], ["a", 1], ["b", 1]]
    

    【讨论】:

    • flat_map 是一个未被充分利用的宝石,不是吗?
    • @tadman 是的,确实如此。基本上,它是reduce 的便捷实现,因为它可以在更多面向函数的语言中完成。
    【解决方案2】:
    arr = [['a', [0, 1]], ['b', [1]]]
    
    arr.each_with_object([]) { |(x,a),b| a.each { |y| b << [x,y] } }
      #=> [["a", 0], ["a", 1], ["b", 1]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2021-03-20
      • 1970-01-01
      相关资源
      最近更新 更多