program tip

문자열 배열을 쉼표로 구분 된 문자열로 어떻게 변환합니까?

radiobox 2020. 11. 19. 08:02
반응형

문자열 배열을 쉼표로 구분 된 문자열로 어떻게 변환합니까?


배열이 있습니다.

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: 문자열 리터럴 .

당신은 할 수 사용 inspect으로 다른 답변에서 제안 , 나는 그것이 개인적인 취향 말하고 싶지만. 나는 그 소스 코드 를보고 직접 선택 하지 않을 것입니다.

참고 : array.to_sentence"1, 2, 3 및 4"스타일 출력을 제공합니다.


여기:

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 및 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

참고 URL : https://stackoverflow.com/questions/11313613/how-do-i-convert-an-array-of-strings-into-a-comma-separated-string

반응형