Ruby 如何在map方法中两次返回一行
我希望在map方法中返回两次值,仅当(例如)键==:b 我有这样的想法: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],
{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 }