【问题标题】:Returning Multiple Values From Map从 Map 返回多个值
【发布时间】:2013-09-18 23:11:57
【问题描述】:

有没有办法:

a = b.map{ |e| #return multiple elements to be added to a }

可以返回多个对象,而不是为要添加到 a 的每次迭代返回单个对象。

我目前正在通过以下方式实现这一目标:

a = []
b.map{ |e| a.concat([x,y,z]) }

有没有办法在一行中实现这一点而无需预先声明a = []

【问题讨论】:

  • 您能否提供一个输入和输出示例,让我们知道您的期望。它可以帮助我们帮助您...
  • 你永远不会在你的代码中使用 map() ,因为 each() 就足够了。您的代码不必要地创建了一个数组,然后您将其丢弃。

标签: ruby arrays map each enumerator


【解决方案1】:

使用 Enumerable#flat_map

这可能与以下没有太大区别:

p [1, 2, 3].map{|num| [1, 2, 3]}.flatten 

--output:-
[1, 2, 3, 1, 2, 3, 1, 2, 3]

【讨论】:

  • 我相信flat_map 效率更高(因为您不需要对整个数组进行两次迭代)
  • 如果你的地图返回像[1, 2, [1, 2, 3]]这样的数组,那就不一样了
【解决方案2】:

使用Enumerable#flat_map

b = [0, 3, 6]
a = b.flat_map { |x| [x, x+1, x+2] }
a # => [0, 1, 2, 3, 4, 5, 6, 7, 8]

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2014-03-14
    相关资源
    最近更新 更多