2013-12-14 22 views
14

Mã số '////'.split('/') kết quả trong []. Trong khi tôi mong đợi nó là ['', '', '', '', '']. Nếu đây là một tính năng của ruby, tại sao nó được thiết kế như vậy?Tại sao '////'.split('/') tạo ra []?

+0

+1 .. để đặt câu hỏi hay ... :) –

+2

Trong khi câu hỏi thú vị, nó không ở dạng tốt nhất có thể được hỏi. Câu hỏi của bạn có thể đánh lừa người đọc rằng bốn dấu gạch chéo liên tiếp là đáng kể cho hiệu ứng này, nhưng nó không phải là. Bạn sẽ nhận được kết quả tương tự với chuỗi dấu gạch chéo ngắn hơn. – sawa

Trả lời

3

Thiết kế này mang lại sự tiện lợi cho việc phân tích chuỗi có dấu phân tách. Ví dụ:

'1␣2␣3␣␣'.split('␣') giờ sẽ cung cấp cho ['1', '2', '3'] thay vì ['1', '2', '3', '', ''].

Tính năng này chỉ nhằm đơn giản hóa quy trình làm việc.

Tuy nhiên, tôi không thích tính năng này vì nó phá vỡ độ tinh khiết của phương pháp này. Để đạt được hiệu quả trên, bạn chỉ cần thêm rstrip('␣') từ '1␣2␣3␣␣'split('␣').

+8

'('␣')' trông dễ thương. –

17

Bạn không thể tách chuỗi ký tự phân cách bằng dấu phân cách.

Bạn nên vượt qua giới hạn như tham số thứ hai để tách chức năng để đạt được hành vi này

'////'.split('/',-1) 
=> 
["", "", "", "", ""] 

Nếu tham số giới hạn được bỏ qua, trailing lĩnh vực rỗng đang bị đàn áp. Nếu giới hạn là số dương, tối đa số trường đó sẽ được trả lại (nếu giới hạn là 1, toàn bộ chuỗi được trả về làm mục nhập duy nhất trong một mảng). Nếu phủ định, không có giới hạn về số trường được trả lại và các trường rỗng theo sau sẽ không bị chặn

+2

* + 1 * .. Tôi đã làm ... :) Nhưng bạn có thể thêm các dòng từ [doc] (http://www.ruby-doc.org/core-2.0.0/String.html#method-i- split) như - ** Nếu tham số giới hạn bị bỏ qua, các trường null theo sau bị chặn **. Nếu giới hạn là số dương, tối đa số trường đó sẽ được trả lại (nếu giới hạn là 1, toàn bộ chuỗi được trả về làm mục nhập duy nhất trong một mảng). ** Nếu phủ định, không có giới hạn về số trường được trả về và các trường null sau không bị chặn. ** –

+0

cảm ơn. nhận xét thực sự hữu ích. – SergeyKutsko

10

Phương pháp điều tra cho thấy kết quả tối ưu hóa, nó chỉ đơn giản là tạo ra các phần tử mảng trống sau trận đấu cuối cùng. là shewn bên dưới:

'////'.split('/') 
=> [] 

'//a//'.split('/') 
=> ["", "", "a"] 
Các vấn đề liên quan