Làm thế nào để tách một chuỗi trong Ruby và nhận tất cả các mục ngoại trừ chuỗi đầu tiên?


83

Chuỗi là ex="test1, test2, test3, test4, test5"

khi tôi sử dụng

ex.split(",").first

nó trở lại

"test1"

Bây giờ tôi muốn lấy các mục còn lại, tức là `" test2, test3, test4, test5 ". Nếu tôi sử dụng

ex.split(",").last

nó chỉ trả lại

"test5"

Làm thế nào để có được tất cả các mục còn lại bỏ qua mục đầu tiên?


Chờ đã, bạn đang sử dụng split(một Stringphương thức) trên một Array?
Konrad Rudolph

xin lỗi guyzz ... im sử dụng chuỗi đây .. tôi sẽ chỉnh sửa các câu hỏi
sgi

Câu trả lời:


98

Thử đi:

first, *rest = ex.split(/, /)

Bây giờ firstsẽ là giá trị đầu tiên, restsẽ là phần còn lại của mảng.


1
Phiên bản nào của Ruby? Tôi đã thử nó trong 1.8.7 và restchỉ chứa "test2".
Jonas Elfström

7
có lẽ có nghĩa làfirst,*rest = ex.split(/,/)
ezpz

Đúng, tôi không thể kiểm tra đường dây của mình vào thời điểm đó. first, *rest = ex.split(/,/)thực sự là những gì tôi muốn nói. Cám ơn giải thích rõ ràng.
avdgaag

Một cách khác là lấy một phạm vi từ mảng kết quả. things = ex.split(/,/); things[1..-1]
Russell B

44
ex.split(',', 2).last

Số 2 ở cuối ghi: tách thành 2 mảnh, không nhiều hơn.

thông thường việc chia nhỏ sẽ cắt giá trị thành nhiều phần nhất có thể, bằng cách sử dụng giá trị thứ hai, bạn có thể giới hạn số lượng phần bạn sẽ nhận được. Sử dụng ex.split(',', 2)sẽ cung cấp cho bạn:

["test1", "test2, test3, test4, test5"]

dưới dạng một mảng, thay vì:

["test1", "test2", "test3", "test4", "test5"]

Nhược điểm là bạn phải làm splitlại nếu muốn tất cả trừ các giá trị đầu tiên dưới dạng một mảng thay vì một chuỗi. Vẫn là một thủ thuật hay. Ngoài ra, việc sử dụng ex.split(',', 2).lastsẽ không trả về mảng mà bạn đề cập, chỉ trả về giá trị cuối cùng của nó, phải không?
avdgaag

Chép-Dán sai lầm haha, cố định nó
user163365

15

Vì bạn đã có một mảng, nên điều bạn thực sự muốn là Array#slicekhông split.

rest = ex.slice(1 .. -1)
# or
rest = ex[1 .. -1]

3
Vì vậy, với một chuỗi, bạn muốn ex.split(/, /).slice(1..-1)lấy tất cả trừ các phần tử đầu tiên, giả sử bạn không quan tâm đến giá trị đầu tiên.
avdgaag

9

Có thể bạn đã gõ nhầm một vài thứ. Từ những gì tôi thu thập được, bạn bắt đầu với một chuỗi chẳng hạn như:

string = "test1, test2, test3, test4, test5"

Sau đó, bạn muốn tách nó để chỉ giữ lại các chuỗi con quan trọng:

array = string.split(/, /)

Và cuối cùng bạn chỉ cần tất cả các yếu tố ngoại trừ yếu tố đầu tiên:

# We extract and remove the first element from array
first_element = array.shift

# Now array contains the expected result, you can check it with
puts array.inspect

Đã làm điều đó trả lời câu hỏi của bạn ?



6

Xin lỗi vì bữa tiệc hơi muộn và hơi ngạc nhiên là không ai đề cập đến phương pháp thả :

ex="test1, test2, test3, test4, test5"
ex.split(",").drop(1).join(",")
=> "test2,test3,test4,test5"

5

nếu bạn muốn sử dụng chúng như một mảng mà bạn đã biết, nếu không bạn có thể sử dụng mỗi một trong số chúng như một tham số khác ... hãy thử điều này:

parameter1,parameter2,parameter3,parameter4,parameter5 = ex.split(",")

2

Bạn cũng có thể làm điều này:

String is ex="test1, test2, test3, test4, test5"
array = ex.split(/,/)
array.size.times do |i|
  p array[i]
end 

0

Hãy thử xem split(",")[i]đâu ilà chỉ mục trong mảng kết quả. splitcho mảng bên dưới

["test1", " test2", " test3", " test4", " test5"] 

phần tử có thể được truy cập bằng chỉ mục.

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.