Trong Clojure, chức năng set
sẽ tự động chuyển đổi vector
hoặc list
thành set
. Nhưng đây không phải là trường hợp cho sorted-set
:Làm thế nào để chuyển đổi danh sách hoặc vectơ thành tập hợp được sắp xếp trong Clojure?
(set [3 2 1]) ; #{1 2 3}
(set '(3 2 1)) ; #{1 2 3}
(sorted-set [3 2 1]) ; #{[3 2 1]}
(sorted-set '(3 2 1)) ; #{(3 2 1)}
Đây là một giải pháp tôi đưa ra:
(defn sorted-set-from-coll [coll]
(eval (cons sorted-set (seq coll))))
(def v [3 2 1])
(sorted-set-from-coll v) ; #{1 2 3}
(sorted-set-from-coll '(3 2 1)) ; #{1 2 3}
(sorted-set-from-coll [3 1 2]) ; #{1 2 3}
Có một/cách nhiều thành ngữ tốt hơn để làm điều này mà không eval?
'thành' là thành ngữ hơn vì nó truyền tải những gì đang diễn ra (một cơ sở hạ tầng khác) và có thể được sử dụng với cơ sở hạ tầng đích hiện tại. –