Techioz Blog

Rubyで列挙可能を結合して文字列を生成する

概要

Ruby 配列には、配列の要素を結合し、オプションのセパレータを追加して文字列を生成する #join メソッドがあります。

範囲などの他の列挙型には同じメソッドがありません。

#inject を使用して動作をエミュレートできます。

('a'..'z').inject('') do |acc, s| 
  if acc.empty?
    s
  else
    acc << ' some separator ' << s.to_s  
  end
end

列挙型を結合するより良い方法はありますか? #join は特別な理由で省略されましたか?

編集:

私が懸念していることの 1 つは、大規模な列挙型を配列にコピーすることです。もちろん、それが使用されるケースはほとんどありませんが、それでもです。例えば:

(1 .. 1_000_000_000_000_000).to_a.join

したがって、私は中間ステップとしてすべての値を含む配列を生成する必要がないソリューションに特に興味があります。

解決策

Array#join を使用します。

('a'..'z').to_a.join(' some separator ')

または (事実上同じです):

[*'a'..'z'].join(' some separator ')