私は配列を持っています:
array = ["10", "20", "50", "99"]
そして、次のような単純なコンマ区切りの文字列リストに変換したいと思います。
"10", "20", "50", "99"
私は配列を持っています:
array = ["10", "20", "50", "99"]
そして、次のような単純なコンマ区切りの文字列リストに変換したいと思います。
"10", "20", "50", "99"
array.join(',')
ほとんどあなたが望むことをします。値の前後の引用符や後のスペースは保持されません。
引用符とスペースを保持する場合:array.map{|item| %Q{"#{item}"}}.join(', ')
が出力されます"\"10\", \"20\", \"50\", \"99\""
。エスケープされた引用符は、質問が実際に単一の文字列を要求する場合に必要です。
%Q
: string リテラルに関するドキュメント。
別の回答で提案されているように使用できますが、それは個人的な好みだと思います。私はそうしません。そのためのソースコードを見て、自分で選択してください。inspect
余談array.to_sentence
ですが、「1、2、3、および 4」スタイルの出力が得られます。
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
ここ:
array.map {|str| "\"#{str}\""}.join(',')
#map
、#inspect
、を使用していくつかの回答が解決策を提供しています#join
。それらはすべて、要素にカンマや文字列区切り文字が埋め込まれているエッジケースに対して、CSV エンコーディングの特定の詳細を正しく取得できません。
stdlib クラスのCSVを使用して独自のものを作成することをお勧めします。
irb> require 'csv'
=> true
irb> a = [10,'1,234','J.R. "Bob" Dobbs',3.14159]
=> [10, "1,234", "J.R. \"Bob\" Dobbs", 3.14159]
irb> puts a.to_csv
10,"1,234","J.R. ""Bob"" Dobbs",3.14159
このエンコーディングが埋め込み区切り文字を気にする必要がない場合、または一部の内部表現のみを意図している場合、map.join ソリューションで十分ですが、カンマ区切り値 (CSV) を期待する他のプログラムと交換するデータを生成する場合は失敗します。一般的に理解されている表現。
最も簡単な解決策は、組み込みの「.to_sentence」メソッドを使用することです。
そう
["fred", "john", "amy"].to_sentence 出力 "fred, john, and amy"
これは少し代替的な解決策であり、二重引用符で囲まれた文字列を含む配列を単一引用符で囲まれたリストに変換する必要がある場合に特に便利です (SQL クエリなどの場合)。
"'#{["John Oliver", "Sam Tom"].join("','")}'"
に
'John Oliver', 'Sam Tom'
帰属: https://alok-anand-ror.blogspot.com/2014/04/ruby-join-array-elements-with-single.html