次の入力を検討してください。
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]