Ruby kết hợp một mảng thành một chuỗi


163

Trong Ruby có cách nào để kết hợp tất cả các thành phần mảng thành một chuỗi không?

Mảng ví dụ:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']

Kết quả ví dụ:

<p>Hello World</p><p>This is a test</p>

6
Các tài liệu là bạn của bạn! Nó sẽ giúp bạn đáng kể để nghiên cứu các phương thức của Array, String, Hash, v.v.
Mark Thomas

Câu trả lời:


303

Sử dụng Array#joinphương thức (đối số joinlà những gì cần chèn giữa các chuỗi - trong trường hợp này là khoảng trắng):

@arr.join(" ")

1
Nếu bạn đang tham gia các chữ số thì sao? [1,2,3] => 123?
stevenspiel

3
@ mr.musicman joinlàm việc với vô số thứ phản hồi to_s, kể cả số nguyên, nhưng kết quả sẽ luôn là một chuỗi. Nếu bạn muốn một kết quả số nguyên, bạn có thể sử dụng to_ikết quả.
sepp2k

1
Nếu ban đầu bạn đã phá vỡ một chuỗi nhiều dòng bằng cách sử dụng String#lines, bạn hoàn toàn có thể buộc nó lại với nhau bằng cách sử dụng my_string.join('')(lưu ý đối số chuỗi trống).
Frank Koehl

Để thêm vào những gì @ sepp2k đã nói: jointhử #to_strđầu tiên và #to_sthứ hai.
Greg Navis

19

Mặc dù khó hiểu hơn một chút join, bạn cũng có thể nhân mảng bằng một chuỗi.

@arr * " "

1
ngoài việc khó hiểu, có bất kỳ lỗ hổng nào có thể xảy ra khi sử dụng thủ thuật này không?
marcio

4
@marcioAlmada Không sai sót, chỉ là chi phí tối thiểu. Trong mảng.c, điều đầu tiên Ruby làm là kiểm tra kiểu chuỗi và sau đó gọi phương thức nối. Ngoài ra: pry với đá nguồn show! Hãy tự thử: $ Array.instance_methods.*($ là tốc ký cho nguồn hiển thị)
okket

1

Đây là giải pháp của tôi:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']
@arr.reduce(:+)
=> <p>Hello World</p><p>This is a test</p>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.