Trong Ruby, tôi muốn chuyển đổi một chuỗi tách biệt riêng biệt như "foo/bar/baz" vào ["foo/bar/baz", "foo/bar", "foo"]. Tôi đã có giải pháp một vài dòng dài; Tôi đang tìm kiếm một lớp lót trang nhã. Nó cũng cần phải làm việc cho số phân đoạn tùy ý (0 trở lên).Cách dễ nhất để chuyển đổi "a/b/c" thành ["a/b/c", "a/b", "a"]
Trả lời
cao nhất tác phẩm bình chọn câu trả lời, nhưng đây là một cách hơi ngắn hơn để làm điều đó mà tôi nghĩ rằng sẽ dễ đọc hơn đối với những người không quen thuộc với tất cả các tính năng sử dụng có:
a=[]; s.scan(/\/|$/){a << $`}
Kết quả được lưu trữ trong a
:
> s = 'abc/def/ghi'
> a=[]; s.scan(/\/|$/){a << $`}
> a
["abc", "abc/def", "abc/def/ghi"]
Nếu trật tự là rất quan trọng, bạn có thể đảo ngược mảng hoặc sử dụng unshift
thay vì <<
.
Nhờ dkubb và OP cho các cải tiến cho câu trả lời này.
Trên ruby 1.8.7 kết quả chỉ là # => "abc/def/ghi" và không phải là mảng như được chỉ định trong câu trả lời – nas
@nas: Giá trị trả về sẽ là chuỗi trong bất kỳ phiên bản ruby nào. Mảng được yêu cầu sẽ nằm trong biến 'a'. Nếu bạn đã nhận thức được điều đó và chỉ là nitpicking, cảm thấy tự do để bỏ qua bình luận của tôi. – sepp2k
Bạn có thể đơn giản hóa mã trong khối hơn nữa bằng cách thực hiện: a = []; 'abc/def/ghi'.scan (/ \/| $ /) {a << $ '} – dkubb
"foo/bar/baz".enum_for(:scan, %r{/|$}).map {Regexp.last_match.pre_match}
'Đếm 'FTW! –
Rất tiếc. Đó là gần như lisp mà không có tất cả các parens. –
mã dễ hơn "foo/bar/baz" .enum_for (: quét,% r {/ | $}) bản đồ {$ '} – user3673267
Không khá hiệu quả như câu trả lời lựa chọn, và cho []
khi đưa ra một chuỗi rỗng, chứ không phải là [""]
, nhưng nó là một thực lót: P
s.split('/').inject([]) { |a,d| a.unshift([a.first,d].compact.join('/')) }
->(l,s,z){
(t = s[/#{z}.[^\/]*/]) && [l[l,s,t], t]
}.tap{ |l|
break l[l,'a/b/c','']
}.flatten.compact
Rất tiếc, nó không phải là dễ nhất ... – Nakilon
- 1. Tại sao ("abc" + char.MaxValue) .CompareTo ("abc") == 0?
- 2. Chuyển đổi chuỗi "abc" đến $ băm -> {a} -> {b} -> {c} trong Perl
- 3. Tại sao "abcdef" không khớp với (? = Abc) def nhưng được so khớp bởi abc (? = Def)?
- 4. Cách so sánh 2 chuỗi theo thứ tự abc
- 5. Cách dễ nhất để chuyển đổi URL thành siêu liên kết trong chuỗi C#?
- 6. Làm cách nào để chuyển đổi DataSet a thành DataReader?
- 7. Cách thành ngữ để chuyển đổi A => Seq [B]
- 8. Cách dễ dàng để chuyển đổi mã c thành x86?
- 9. Sắp xếp theo thứ tự abc trong đường ray
- 10. Tự động nhóm UITableView theo thứ tự abc
- 11. Cách dễ nhất để chuyển đổi Danh sách thành Tập hợp trong Java
- 12. Cách dễ nhất để chuyển đổi đánh dấu Wiki thành HTML là gì?
- 13. thứ tự một truy vấn mysql theo thứ tự abc
- 14. Làm cách nào để tạo chỉ mục văn bản cho tìm kiếm '% abc%'?
- 15. Cách dễ nhất hoặc Công cụ tốt nhất để chuyển đổi văn bản từ thành sạch (X) HTML
- 16. Làm thế nào để cắt một địa phương phần email để 'abc ... @ gmail.com'
- 17. Thuật toán để so sánh các từ (không theo thứ tự abc)
- 18. PHP loại mảng theo thứ tự abc bằng cách sử dụng giá trị subarray
- 19. Cách dễ dàng để chuyển đổi bảng dữ liệu thành bảng băm hoặc sqldatareader thành hashtable
- 20. Sử dụng jQuery để chèn động vào danh sách theo thứ tự abc
- 21. Cách tốt nhất để tự động chuyển đổi tệp nguồn LilyPond thành nhiều khóa là gì?
- 22. Nginx chuyển đổi tên miền phụ để thành phần đường dẫn mà không cần chuyển hướng
- 23. Cách tốt nhất để chuyển đổi Chuỗi thành ByteString
- 24. Cách tốt nhất để chuyển đổi std :: wstring thành QString
- 25. Cách nhanh nhất để chuyển đổi chuỗi thành nhị phân?
- 26. Cách tốt nhất để chuyển đổi Pascal Case thành câu
- 27. Cách nhanh nhất để chuyển đổi T [,] thành T [] []?
- 28. Cách sắp xếp NSArray với các đối tượng từ điển theo thứ tự abc?
- 29. Làm cách nào để chuyển đổi các ký tự chuỗi thành danh sách?
- 30. Làm thế nào để chuyển đổi A [B [C]] thành B [A [C]] nếu A và B là monads?
Bạn biết 'FileUtils.mkdir_p', phải không? – Svante