Clojure có cung cấp bất kỳ cách tích hợp nào để tìm vị trí của một chuỗi phụ trong một chuỗi nhất định không?Vị trí chuỗi phụ Clojure theo thứ tự
Trả lời
Clojure cung cấp cách tích hợp để dễ dàng Java Interop.
(java.util.Collections/indexOfSubList '(a b c 5 6 :foo g h) '(5 6 :foo))
;=> 3
Trình tự là trừu tượng, không phải là sự kết hợp. Một số concretions mà bạn có thể sử dụng thông qua việc trừu tượng chuỗi có một cách để tìm vị trí của một chuỗi (ví dụ như các chuỗi và các bộ sưu tập java), nhưng các trình tự nói chung thì không, bởi vì concretion cơ bản không cần phải có chỉ mục .
Tuy nhiên, những gì bạn có thể làm là tạo ra một juxt của nhận dạng phần tử và chức năng chỉ mục. Hãy xem map-indexed.
Đây là một triển khai ngây thơ sẽ lười biếng tìm vị trí của (tất cả) (các) chuỗi trong một chuỗi. Chỉ cần sử dụng đầu tiên hoặc lấy 1 để chỉ tìm một:
(defn find-pos
[sq sub]
(->>
(partition (count sub) 1 sq)
(map-indexed vector)
(filter #(= (second %) sub))
(map first)))
=> (find-pos [:a :b \c 5 6 :foo \g :h]
[\c 5 6 :foo])
(2)
=> (find-pos "the quick brown fox"
(seq "quick"))
(4)
Hãy quan tâm đến thuật toán dựa trên chỉ mục nói chung không phải là ngôn ngữ chức năng. Trừ khi có lý do chính đáng bạn cần chỉ mục trong kết quả cuối cùng, việc sử dụng tra cứu chỉ mục xa hoa được coi là mã nguồn.
- 1. bản đồ clojure theo thứ tự các cặp
- 2. Thứ tự các vị trí được tìm kiếm để tải các DLL được tham chiếu theo thứ tự nào?
- 3. Thứ tự mã trong Clojure
- 4. Tự động thay đổi vị trí của cửa sổ phụ thuộc vào vị trí hiển thị
- 5. Đảo ngược thứ tự từ trong một chuỗi ở vị trí
- 6. Thứ tự SQL theo văn bản ASC, hiển thị số ở vị trí cuối
- 7. Tìm các ký tự chung trong chuỗi các chuỗi, theo đúng thứ tự
- 8. Nhận Thứ hai đến vị trí ký tự cuối cùng từ chuỗi
- 9. chuỗi riêng biệt thành hai theo vị trí nhất định
- 10. Thứ tự phụ thuộc Maven
- 11. tìm vị trí của ký tự trong chuỗi
- 12. trong leiningen eclipse Không thể xác định vị trí clojure/contrib/duck_streams__init.class hoặc clojure/contrib/duck_streams.clj
- 13. Cách so sánh 2 chuỗi theo thứ tự abc
- 14. Sắp xếp chuỗi Android.xml theo thứ tự bảng chữ cái
- 15. Thứ tự SQL Theo danh sách các chuỗi?
- 16. vị trí: tuyệt đối, div theo div
- 17. Làm thế nào để có được vị trí của chuỗi phụ trong chuỗi trong hàng loạt
- 18. tìm vị trí của một chuỗi con trong một chuỗi
- 19. CSS Vị trí cố định với Ký tự tự động
- 20. Thứ tự MySQL được đánh giá theo thứ tự nào?
- 21. thứ tự một truy vấn mysql theo thứ tự abc
- 22. cao theo thứ tự ScalaCheck
- 23. MySql theo thứ tự mảng?
- 24. Perl readdir theo thứ tự
- 25. Thứ tự SQLite theo Ngày
- 26. Bản đồ của Clojure: là các khóa và vals theo thứ tự như nhau?
- 27. Tách một chuỗi, ở mọi vị trí thứ n, bằng JavaScript?
- 28. SQL Server Tham gia theo thứ tự
- 29. Vị trí của chuỗi con trong NSString
- 30. Clojure - Phản ứng phụ xảy ra ngoài trật tự
Cảm ơn câu trả lời của bạn. Đó là những gì tôi sẽ sử dụng cuối cùng, nhưng tôi thường cố gắng tránh gọi Java Interop một cách rõ ràng từ mã 'kinh doanh', vì tôi thấy nó có một chút tiết. Cảm ơn bạn. –
Trong khi thao tác này có thể hoạt động, hãy lưu ý rằng một bộ sưu tập không phải là một chuỗi. – NielsK
@NielsK Các khái niệm triết học sang một bên, tôi nghĩ bạn sẽ tìm thấy 'java.util.List' như là một siêu lớp của' seq' và phương thức java nằm trên cặp 'java.util.List'. Như vậy, bạn có thể sử dụng điều này trên các trình tự lười biếng (chỉ cần cẩn thận để không đánh giá một chuỗi vô hạn) '(java.util.Collections/indexOfSubList (khoảng 10) (khoảng 3 7)); => 3', vectơ, được sắp xếp- bản đồ, v.v. –