考虑以下输入:
input = [:a, :b, :c]
# output = input.join_array(:x)
什么是获得以下输出的可读且简洁的方法(在 Ruby 中):
[:a, :x, :b, :x, :c]
考虑以下输入:
input = [:a, :b, :c]
# output = input.join_array(:x)
什么是获得以下输出的可读且简洁的方法(在 Ruby 中):
[:a, :x, :b, :x, :c]
一种天真的方法:
input = [:a, :b, :c]
input.flat_map{|elem| [elem, :x]}[0...-1] # => [:a, :x, :b, :x, :c]
不切割最后一个元素:
res = input.reduce([]) do |memo, elem|
memo << :x unless memo.empty?
memo << elem
end
res # => [:a, :x, :b, :x, :c]
您可以使用Array#product将 :x 分布在整个数组中,然后将结果展平。例如:
input = [:a, :b, :c]
input.product([:x]).flatten
#=> [:a, :x, :b, :x, :c, :x]
假设您想要的结果不仅仅是意外排除最后一个元素的错字,您可以使用Array#pop、Array#slice或其他类似方法从数组中修剪最后一个元素。一些例子包括:
input.product([:x]).flatten[0...-1]
#=> [:a, :x, :b, :x, :c]
output = input.product([:x]).flatten
output.pop
output
#=> [:a, :x, :b, :x, :c]
关于什么:
input = [:a, :b, :c]
p input.zip([:x].cycle).flatten[0..-2] #=> [:a, :x, :b, :x, :c]
为了好玩,我们可以使用join
. 不一定可读或简洁!
[:a, :b, :c].join('x').chars.map(&:to_sym) # => [:a, :x, :b, :x, :c]
# Or, broken down:
input = [:a, :b, :c]
output = input.join('x') # => "axbxc"
output = output.chars # => ["a", "x", "b", "x", "c"]
output = output.map(&:to_sym) # => [:a, :x, :b, :x, :c]
这怎么样 ?
input = [:a, :b, :c]
p input.each_with_object(:x).to_a.flatten[0..-2]
# >> [:a, :x, :b, :x, :c]