私は配列を持っています:
array = ["10", "20", "50", "99"]
そして、私はそれを次のような単純なコンマ区切りの文字列リストに変換したい:
"10", "20", "50", "99"
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
array.join(',')
は、ほぼ必要なことを行います。値を囲む引用符やその後のスペースは保持されません。
引用符とスペースを保持する場合:array.map{|item| %Q{"#{item}"}}.join(', ')
これは"\"10\", \"20\", \"50\", \"99\""
。質問が実際に単一の文字列を必要とする場合、エスケープされた引用符が必要です。
%Q
: 文字列リテラル 。
あなたはcouldとしてinspect
を 別の回答で提案 として使用します。これは個人的な好みです。私は source code を見て、自分で選択しません。
便利な脇:array.to_sentence
は、「1、2、3、および4」スタイルの出力を提供します。
ここに:
array.map {|str| "\"#{str}\""}.join(',')
いくつかの回答により、#map
、#inspect
、#join
。それらはすべて、要素に埋め込まれたコンマや文字列区切り文字を含むEdgeの場合に正しい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