Перетворення масиву на перетворення рядків


178

У мене є рубіновий масив на кшталт ['12','34','35','231'].

Я хочу перетворити його на зразок рядка '12','34','35','231'.

Як я можу це зробити?

Відповіді:


315

Я приєднаюся до веселощів із:

['12','34','35','231'].join(', ')

Редагувати:

"'#{['12','34','35','231'].join("', '")}'"

Деякі рядкові інтерполяції, щоб додати першу та останню єдину цитату: P


1
Це призводить до "12,34,35,231". У результаті не вистачає єдиних лапок.
Бернард

1
Гаразд додав рядкову інтерполяцію, щоб додати першу та останню одиничні лапки: P
роз’їдено

як це повернути?
zx1986

що ти маєш на увазі revert @ zx1986
роз'їдає

@corroded Вибачте, я зрозумів. JSON.parse("[12, 39, 100]")поверне масив.
zx1986

43
> a = ['12','34','35','231']
> a.map { |i| "'" + i.to_s + "'" }.join(",")
=> "'12','34','35','231'"

6
Можливо, використовуючи "'#{i}'"замість цього.
Младен Ябланович

не думаю, що карта потрібна. приєднатися повинно зробити трюк. дивіться нижче
djburdick

31

спробуйте цей код ['12','34','35','231']*","

дасть результат "12,34,35,231"

Я сподіваюся, що це результат, який ви, дайте мені знати


Я думаю, що в ОП також повинна бути єдина цитата.
Лаф


9
string_arr.map(&:inspect).join(',') # or other separator

Це не дає правильного результату - значення потрібно загорнути в єдині лапки. Якби це був бажаний вихід, тоді кращим варіантом буде string_arr.join (",").
Шон Камерон

Шон, ти помилився. Ви запустили вираз, принаймні один раз ??
avihil

Це все-таки неправильно. Це призводить до подвійних лапок навколо записів масиву, а не до одиничних лапок. Плюс до того, він покладається на припущення про формат, який "inspect ()" друкує дані, що робить його крихким.
Ендрю Ходжкінсон

['1', '2', '3']. Карта {| o | "\ '# {o} \'"} .join (',')
avihil

7

Я вважаю цей спосіб читабельним та рубійним:

add_quotes =- > x{"'#{x}'"}

p  ['12','34','35','231'].map(&add_quotes).join(',') => "'12','34','35','231'"

5
> puts "'"+['12','34','35','231']*"','"+"'"
'12','34','35','231'

> puts ['12','34','35','231'].inspect[1...-1].gsub('"',"'")
'12', '34', '35', '231'


3
irb(main)> varA
=> {0=>["12", "34", "35", "231"]}
irb(main)> varA = Hash[*ex.collect{|a,b| [a,b.join(",")]}.flatten]
...

3
irb(main):027:0> puts ['12','34','35','231'].inspect.to_s[1..-2].gsub('"', "'")
'12', '34', '35', '231'
=> nil

2

Ви можете використовувати якийсь функціональний підхід до програмування, трансформуючи дані:

['12','34','35','231'].map{|i| "'#{i}'"}.join(",")


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.