1

文字列値を一重引用符で囲んだまま、文字列と整数の配列を結合文字列に変換する必要があります。たとえば、次のように変更する必要があります。

["abc", "xyz", 123, 456]

これに:

"'abc','xyz',123,456"

joinとのバリエーションを試しましto_sたが、うまくいきません。どんな助けでも大歓迎です。

ワンライナーで動作するようになりました:

["abc", "xyz", 123, 456].to_s.gsub(/[\[\]\"]/,'[' =>'','"'=>'\'')
#=> "'abc', 'xyz', 123, 456"

しかし、もっと良い方法があるかどうかはまだ興味があります。

4

3 に答える 3

2

以下は動作するはずです

array = ["abc", "xyz", 123, 456]
array.collect{|e| e.to_i == e ? e : "'#{e}'"}.join(",")

戻り値

"'abc','xyz',123,456"
于 2012-11-24T03:25:13.860 に答える
2

inspectではなく、使用してくださいto_s

通常、文字列リテラル式では、一重引用符ではなく二重引用符が使用されます。一重引用符の代わりに二重引用符を使用してもかまわない場合は、簡単です。

["abc", "xyz", 123, 456].map(&:inspect).join(",")
# => "\"abc\",\"xyz\",123,456"

ただし、本当に一重引用符が必要な場合は、元の文字列に二重引用符がなければ、それほど難しくありません。

["abc", "xyz", 123, 456].map(&:inspect).join(",").tr('"', "'")
# => "'abc','xyz',123,456"
于 2012-11-24T04:20:37.393 に答える
2

配列に数値を含む文字列がある場合、to_i は整数に変換されます。文字列として保持したい場合。これを使う必要があると思います。

      arr=["123", "abc", 123]
      arr.collect{|e|( e.is_a? Integer)? e :"'#{e}'"}.join(',') #=> "'abc','123',1,3"
于 2012-11-24T04:21:35.713 に答える