Clojure 学习入门(12)- map/pmap

来源:互联网 发布:天刀女捏脸数据导入 编辑:程序博客网 时间:2024/04/30 01:38
clojure map数据结构的常用方法,小结一下

map 各种排序

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. (println (sorted-map-by > 1 "a", 2 "b", 3 "c"))     ;; {3 c, 2 b, 1 a}  
  2.   
  3. ;; 相等 value 取一个  
  4. (let [results {:A 1 :B 2 :C 2 :D 5 :E 1 :F 1}]  
  5.   (println (into (sorted-map-by (fn [key1 key2]  
  6.                                   (compare (get results key2)  
  7.                                            (get results key1))))  
  8.                  results)))              ;;    {:D 5, :C 2, :A 1}  
  9.   
  10. ;; 全不等 value   
  11. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]  
  12.   (println (into (sorted-map-by (fn [key1 key2]  
  13.                                   (compare (get results key2)  
  14.                                            (get results key1))))  
  15.                  results)))              ;;    {:D 6, :C 5, :F 4, :E 3, :B 2, :A 1}  
  16.   
  17. ;; value 升序  
  18. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]  
  19.   (println (into (sorted-map-by (fn [key1 key2]  
  20.                                   (compare [(get results key1) key1]  
  21.                                            [(get results key2) key2])))  
  22.                  results)))    ;;   {:A 1, :B 2, :E 3, :F 4, :C 5, :D 6}  
  23.   
  24. ;; value 降序  
  25. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]  
  26.   (println (into (sorted-map-by (fn [key1 key2]  
  27.                                   (compare [(get results key2) key2]  
  28.                                            [(get results key1) key1])))  
  29.                  results)))    ;;   {:D 6, :C 5, :F 4, :E 3, :B 2, :A 1}  
  30.   
  31. ;; value 升序  
  32. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]  
  33.   (println (into (sorted-map-by (fn [key1 key2]  
  34.                                   (compare [(get results :key1) key1]  
  35.                                            [(get results :key2) key2])))  
  36.                  results)))    ;;   {:A 1, :B 2, :C 5, :D 6, :E 3, :F 4}  
  37.   
  38. ;; value 降序  
  39. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]  
  40.   (println (into (sorted-map-by (fn [key1 key2]  
  41.                                   (compare [(get results :key2) key2]  
  42.                                            [(get results :key1) key1])))  
  43.                  results)))    ;;   {:F 4, :E 3, :D 6, :C 5, :B 2, :A 1}  
  44.   
  45.   
  46. ;; 默认升序排列  
  47. (println (into (sorted-map) {:2013-12-23 0, :2013-12-22 0, :2013-12-21 0, :2013-12-20 3600, :2013-12-24 0, :2013-12-18 0, :2013-12-19 3600}))  
  48. ;; {:2013-12-18 0, :2013-12-19 3600, :2013-12-20 3600, :2013-12-21 0, :2013-12-22 0, :2013-12-23 0, :2013-12-24 0}  
  49.   
  50. ;; 取排序后最末一个  
  51. (println (last (into (sorted-map) {:2013-12-23 0, :2013-12-22 0, :2013-12-21 0, :2013-12-20 3600, :2013-12-24 0, :2013-12-18 0, :2013-12-19 3600})))  
  52. ;; [:2013-12-24 0]  
  53.   
  54.   
  55. ;; 自定义key降序排序  
  56. (let [results {:2013-12-23 0, :2013-12-22 0, :2013-12-21 0, :2013-12-20 3600, :2013-12-24 0, :2013-12-18 0, :2013-12-19 3600}]  
  57.   (println (into (sorted-map-by (fn [key1 key2]  
  58.                                   (compare [(get results :key2) key2]  
  59.                                            [(get results :key1) key1])))  
  60.                  results)))      
  61. ;; {:2013-12-24 0, :2013-12-23 0, :2013-12-22 0, :2013-12-21 0, :2013-12-20 3600, :2013-12-19 3600, :2013-12-18 0}  


先排序后取值

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. ;; 先对日期排序,然后取前num天  
  2. (defn take-sort-data [data num]  
  3.     (let [  
  4.           result-sorted  (into (sorted-map-by (fn [key1 key2]  
  5.                                                 (compare [(get data :key2) key2]  
  6.                                                          [(get data :key1) key1]))) data)    ;; 对日期排序  
  7.           result (select-keys result-sorted (take num (keys result-sorted)))]  
  8.       (println "data = " data)  
  9.       (println "result-sorted = " result-sorted)  
  10.       (println "result = " result)  
  11.       (println "json/write-str result = " (json/write-str result)))  
  12.     )  
  13.   
  14. (let [data {:2013-12-23 0, :2013-12-22 0, :2013-12-21 0, :2013-12-20 3600, :2013-12-24 0, :2013-12-18 0, :2013-12-19 3600}]  
  15.   (take-sort-data  data 6)  
  16.   (take-sort-data  data 4)  
  17.   )  
  18.   
  19. ;; (take-sort-data  data 6) 's result  
  20. ;data =  {:2013-12-24 0, :2013-12-23 0, :2013-12-20 3600, :2013-12-21 0, :2013-12-22 0, :2013-12-18 0, :2013-12-19 3600}  
  21. ;result-sorted =  {:2013-12-24 0, :2013-12-23 0, :2013-12-22 0, :2013-12-21 0, :2013-12-20 3600, :2013-12-19 3600, :2013-12-18 0}  
  22. ;result =  {:2013-12-19 3600, :2013-12-20 3600, :2013-12-21 0, :2013-12-22 0, :2013-12-23 0, :2013-12-24 0}  
  23. ;json/write-str result =  {"2013-12-19":3600,"2013-12-20":3600,"2013-12-21":0,"2013-12-22":0,"2013-12-23":0,"2013-12-24":0}  
  24. ;  
  25. ;; (take-sort-data  data 4) 's result  
  26. ;data =  {:2013-12-24 0, :2013-12-23 0, :2013-12-20 3600, :2013-12-21 0, :2013-12-22 0, :2013-12-18 0, :2013-12-19 3600}  
  27. ;result-sorted =  {:2013-12-24 0, :2013-12-23 0, :2013-12-22 0, :2013-12-21 0, :2013-12-20 3600, :2013-12-19 3600, :2013-12-18 0}  
  28. ;result =  {:2013-12-21 0, :2013-12-22 0, :2013-12-23 0, :2013-12-24 0}  
  29. ;json/write-str result =  {"2013-12-21":0,"2013-12-22":0,"2013-12-23":0,"2013-12-24":0}  


参考推荐:

sorted-map

sorted-map-by

compare

0 0
原创粉丝点击