Vẫn đang làm việc thông qua Lập trình tập thể thông minh và sử dụng Clojure để viết mã. Tôi đã có nó làm việc, nhưng một số bộ phận thực sự xấu xí, vì vậy tôi nghĩ rằng tôi muốn hỏi một số các chuyên gia xung quanh đây để giúp làm sạch nó lên.Xóa các mục khỏi bản đồ dựa trên nội dung của một bản đồ khác
Giả sử tôi có một bản đồ mà trông như thế này (ràng buộc để "REC '):
{"Superman Returns" 3.902419556891574, "Lady in the Water" 2.8325499182641614,
"Snakes on a Plane" 3.7059737842895792, "The Night Listener" 3.3477895267131017,
"You, Me and Dupree" 2.651006036204627, "Just My Luck" 2.5309807037655645}
và tôi muốn loại bỏ những mặt hàng với các phím mà cũng nằm trong bản đồ (ràng buộc để' mymovies "):
{"Snakes on a Plane" 4.5, "You, Me and Dupree" 1.0, "Superman Returns" 4.0}
vì vậy mà tôi có được bản đồ:
{"Lady in the Water" 2.8325499182641614, "The Night Listener" 3.3477895267131017,
"Just My Luck" 2.5309807037655645}
mã mà tôi quản lý để có được để làm điều này trông giống như:
(apply merge (map #(hash-map (first %) (second %))
(remove #(contains? mymovies (first %))
recs)))
Điều đó có vẻ khá xấu xí với tôi. Có vẻ như không cần thiết phải tạo bản đồ từ giá trị mà tôi lấy lại từ "xóa". Có cách nào sạch hơn để làm việc này không?
CẬP NHẬT: Câu trả lời của Joost dưới đây đã làm nảy sinh ý tưởng khác. Nếu tôi bật các phím của hai bản đồ thành các tập Tôi có thể sử dụng select-phím như thế này:
(select-keys recs (difference (set (keys recs))
(set (keys mymovies))))
Joost, nhờ chuyển cho tôi vào chọn-phím. Tôi không biết về chức năng đó trước đây. Bây giờ để viết lại một số phần khác với kiến thức mới được tìm thấy này!
Tốt! Không chắc chắn làm thế nào tôi bỏ lỡ chức năng đó. Có rất nhiều chức năng để học và ghi nhớ ... –
Điều Dave nói :) –