Tôi đang di chuyển cơ sở mã Java của mình sang Scala thuần túy và tôi bị kẹt on this one piece of code. Tôi có triển khai IntervalMap tức là cấu trúc dữ liệu cho phép bạn lập bản đồ hiệu quả các dải [from,to]
đến values
trong đó các hoạt động set
, delete
và get
là tất cả O(log n)
(hơi khác với IntervalTree hoặc SegmentTree).Di chuyển mã Java TreeMap sang Scala?
Mã này sử dụng Java của java.util.TreeMaps
và trong khi chuyển sang Scala, tôi chạy vào 2 vấn đề lớn:
Scala không có
mutable.TreeMap
- Tôi quyết định đi xung quanh nó bằng cách sử dụngmutable.TreeSet
(kỳ quặc Scala cómutable.TreeSet
nhưng không cómutable.TreeMap
) để lưu trữ khóa và lưu trữ các giá trị trong phụ trợmutable.Map
. Đây là một hack khó chịu nhưng có cách nào tốt hơn?vấn đề tiếp theo là Scala của
mutable.TreeSet
không có tương đương vớijava.util.TreeSet
'sceilingKey
,floorEntry
,pollFirst
,pollLast
đó là tất cảO(log n)
hoạt động trong Java.
Vì vậy, làm cách nào để di chuyển mã của tôi sang Scala tốt nhất? Các phương pháp hay nhất trong những tình huống này là gì? Tôi thực sự không muốn viết các triển khai cây của riêng mình. Có một cách Scala thành ngữ hơn bằng cách viết IntervalMaps mà tôi không biết? Hoặc là có một số thư viện có uy tín ngoài kia? Hoặc không Scala chỉ đơn giản là hút ở đây với TreeSet gimped của nó và TreeMaps không tồn tại. Ofcourse tôi chỉ có thể sử dụng Java TreeMap
trong Scala nhưng đó là xấu xí và tôi mất tất cả các tính năng thu thập Scala đẹp và tôi cũng có thể sử dụng Java sau đó.
Đây là mã Java hiện tại của tôi: https://gist.github.com/pathikrit/5574521
http://stackoverflow.com/questions/4531856/why-is-there-no-mutable-treemap-in-scala – assylias
Đó liên kết không thực sự trả lời câu hỏi của tôi về cách thực sự di chuyển mã của tôi. Các thực hành/thành ngữ tốt nhất là gì? Và, cuối cùng, tôi vẫn không có tương đương với 'floorEntry' – pathikrit