70

私は配列を持っています:

array = ["10", "20", "50", "99"]

そして、次のような単純なコンマ区切りの文字列リストに変換したいと思います。

"10", "20", "50", "99"
4

7 に答える 7

126

array.join(',')ほとんどあなたが望むことをします。値の前後の引用符や後のスペースは保持されません。

引用符とスペースを保持する場合:array.map{|item| %Q{"#{item}"}}.join(', ') が出力されます"\"10\", \"20\", \"50\", \"99\""。エスケープされた引用符は、質問が実際に単一の文字列を要求する場合に必要です。

%Q: string リテラルに関するドキュメント。

別の回答で提案されているように使用できますが、それは個人的な好みだと思います。私はそうしません。そのためのソースコードを見て、自分で選択してください。inspect

余談array.to_sentenceですが、「1、2、3、および 4」スタイルの出力が得られます。

于 2012-07-03T14:58:41.513 に答える
86
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
于 2012-07-03T14:58:45.277 に答える
18

ここ:

array.map {|str| "\"#{str}\""}.join(',')
于 2012-07-03T14:58:29.683 に答える
10

#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) を期待する他のプログラムと交換するデータを生成する場合は失敗します。一般的に理解されている表現。

于 2012-07-03T16:57:36.857 に答える
3

最も簡単な解決策は、組み込みの「.to_sentence」メソッドを使用することです。

そう

["fred", "john", "amy"].to_sentence 出力 "fred, john, and amy"

于 2018-10-14T07:12:45.617 に答える
2

これは少し代替的な解決策であり、二重引用符で囲まれた文字列を含む配列を単一引用符で囲まれたリストに変換する必要がある場合に特に便利です (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

于 2019-07-16T17:39:33.010 に答える