Ruby 如何在map方法中两次返回一行

Ruby 如何在map方法中两次返回一行,ruby,Ruby,我希望在map方法中返回两次值,仅当(例如)键==:b 我有这样的想法: {a: 1, b: 2, c: 3}.map{ |x| x } # => [[:a, 1], [:b, 2], [:c, 3]] 我想创建以下内容: # => [[:a, 1], [:b, 2], [:b, 2], [:c, 3]] 我试过: output = {a: 1, b: 2, c: 3}.map{ |x| x.first == :b ? [x,x] : x } # => [[:a, 1],

我希望在map方法中返回两次值,仅当(例如)键==:b

我有这样的想法:

{a: 1, b: 2, c: 3}.map{ |x| x }
# => [[:a, 1], [:b, 2], [:c, 3]]
我想创建以下内容:

# => [[:a, 1], [:b, 2], [:b, 2], [:c, 3]]
我试过:

output = {a: 1, b: 2, c: 3}.map{ |x| x.first == :b ? [x,x] : x }
# => [[:a, 1], [[:b, 2], [:b, 2]], [:c, 3]]

output.flatten
# => [:a, 1, :b, 2, :b, 2, :c, 3]
output.flatten(1)
# => [:a, 1, [:b, 2], [:b, 2], :c, 3]

有什么想法吗?

你可以把它写在一行里
{a:1,b:2,c:3}.map{x | x.first==:b?[x,x]:[x]}.flatten(1)


{a:1,b:2,c:3}.reduce([]){memo,x | x.first==:b?memo
{a:1,b:2,c:3}.map{x | x.first==:b?[x,x]:[x]}.flatte(1)
哦,这么简单xD.我就知道我就快到了。谢谢
{a: 1, b: 2, c: 3}.map{ |x| x.first == :b ? [x,x] : [x] }.flatten(1)
{a: 1, b: 2, c: 3}.reduce([]){ |memo, x| x.first == :b ? memo << x << x : memo << x }