2010-08-19 29 views
15

Cách thành ngữ (sạch) tốt nhất để chuyển đổi một chuỗi các chuỗi thành một chuỗi, trong khi vẫn giữ các dấu ngoặc đơn kèm theo cho từng phần tử.
Nói cách khác, từ này:Làm phẳng một chuỗi các chuỗi trong Ruby

a = ["file 1.txt", "file 2.txt", "file 3.txt"] 

tôi cần phải có được điều này

"'file 1.txt' 'file 2.txt' 'file 3.txt'" 

đơn và dấu ngoặc kép có thể được trao đổi ở đây. Cách tốt nhất tôi biết là sử dụng bản đồ và tiêm/giảm.

ví dụ: a.map{|dir| "'" + dir + "'"}.join(' ')
eg2: a.reduce("'"){|acc, dir| acc += dir+"' "}

Hiệu suất có thể được cải thiện bằng cách tránh tạo ra chuỗi tạm thời (+ nhà điều hành). Đó không phải là câu hỏi chính của tôi. Có cách nào ngắn gọn hơn để đạt được kết quả tương tự không?

+0

Bạn cần phải thoát khỏi dấu ngoặc kép bên trong các thành viên mảng? –

+0

Không, chỉ để giữ dấu ngoặc kép bắt đầu và kết thúc như được hiển thị ở trên cho mảng. Tôi nhận ra rằng các dấu ngoặc kép được hiển thị không nằm trong chính các chuỗi và đó là lý do tại sao chúng bị tước đi khi chỉ thực hiện một phép nối trên mảng. – Alkaline

Trả lời

27

ngắn hơn không có nghĩa là đơn giản hơn. Ví dụ đầu tiên của bạn là gọn gàng, dễ đọc và dễ thay đổi, không phức tạp một cách không cần thiết.

a.map { |s| "'#{s}'" }.join(' ') 
13

Thử

"'#{a.join("' '")}'" 

Hoặc nếu chơi golf

?'+a*"' '"+?' 
+1

Tất cả các trích dẫn đó đều khó tính nhưng bạn đã có câu trả lời tốt nhất từ ​​trước tới nay. – Alkaline

+3

Tôi không nói điều này là xấu, nhưng nó không chính xác đọc một cách tự nhiên. Đó là một thứ mà thậm chí có thể làm cho cả một người theo kinh nghiệm Rubyist "Huh?" ngay cái nhìn đầu tiên. – Chuck

+0

Chơi golf thú vị! – captainpete

1

Hãy thử điều này:

"'" + a.join("' '") + "'" 
0
"'"+a*"' '"+"'" 

hoặc

"'#{a*"' '"}'" 

hoặc

a.to_s[1...-1].gsub /",?/,"'" 
Các vấn đề liên quan