clojure map数据结构的常用方法,小结一下

map 各种排序

[html] view plaincopy print?
  1. (println (sorted-map-by > 1 "a", 2 "b", 3 "c"))     ;; {3 c, 2 b, 1 a}
  2. ;; 相等 value 取一个
  3. (let [results {:A 1 :B 2 :C 2 :D 5 :E 1 :F 1}]
  4. (println (into (sorted-map-by (fn [key1 key2]
  5. (compare (get results key2)
  6. (get results key1))))
  7. results)))              ;;    {:D 5, :C 2, :A 1}
  8. ;; 全不等 value
  9. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]
  10. (println (into (sorted-map-by (fn [key1 key2]
  11. (compare (get results key2)
  12. (get results key1))))
  13. results)))              ;;    {:D 6, :C 5, :F 4, :E 3, :B 2, :A 1}
  14. ;; value 升序
  15. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]
  16. (println (into (sorted-map-by (fn [key1 key2]
  17. (compare [(get results key1) key1]
  18. [(get results key2) key2])))
  19. results)))    ;;   {:A 1, :B 2, :E 3, :F 4, :C 5, :D 6}
  20. ;; value 降序
  21. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]
  22. (println (into (sorted-map-by (fn [key1 key2]
  23. (compare [(get results key2) key2]
  24. [(get results key1) key1])))
  25. results)))    ;;   {:D 6, :C 5, :F 4, :E 3, :B 2, :A 1}
  26. ;; value 升序
  27. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]
  28. (println (into (sorted-map-by (fn [key1 key2]
  29. (compare [(get results :key1) key1]
  30. [(get results :key2) key2])))
  31. results)))    ;;   {:A 1, :B 2, :C 5, :D 6, :E 3, :F 4}
  32. ;; value 降序
  33. (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}]
  34. (println (into (sorted-map-by (fn [key1 key2]
  35. (compare [(get results :key2) key2]
  36. [(get results :key1) key1])))
  37. results)))    ;;   {:F 4, :E 3, :D 6, :C 5, :B 2, :A 1}
  38. ;; 默认升序排列
  39. (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}))
  40. ;; {: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}
  41. ;; 取排序后最末一个
  42. (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})))
  43. ;; [:2013-12-24 0]
  44. ;; 自定义key降序排序
  45. (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}]
  46. (println (into (sorted-map-by (fn [key1 key2]
  47. (compare [(get results :key2) key2]
  48. [(get results :key1) key1])))
  49. results)))
  50. ;; {: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 plaincopy print?
  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. (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}]
  14. (take-sort-data  data 6)
  15. (take-sort-data  data 4)
  16. )
  17. ;; (take-sort-data  data 6) 's result
  18. ;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}
  19. ;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}
  20. ;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}
  21. ;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}
  22. ;
  23. ;; (take-sort-data  data 4) 's result
  24. ;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}
  25. ;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}
  26. ;result =  {:2013-12-21 0, :2013-12-22 0, :2013-12-23 0, :2013-12-24 0}
  27. ;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

Clojure 学习入门(12)- map/pmap相关推荐

  1. Clojure 学习入门(6)- 函数定义

    一.创建函数:  fn: fn是一个宏,用于定义一个简单的函数,如下:  [python] view plaincopy print? user=> (fn [] "hello&quo ...

  2. Clojure 学习入门(6)—— 函数定义

    一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下:  user=> (fn [] "hello") #<user$eval375$fn__376 us ...

  3. Clojure 学习入门(13)- binding

    Clojure里面是不支持变量的.Binding跟变量有点像,但是在被赋值之前是不允许改的,包括:全局binding, 线程本地(thread local)binding, 以及函数内的本地bindi ...

  4. Clojure 学习入门(10)- httpkit

    Http-kit 是主要由Java 和 Clojure开发,为Clojure定制的零依赖的HTTP lib,仅用3000多行代码,实现了高性能 Server,Client,Timer.代码量少,实现简 ...

  5. Clojure 学习入门(8)- 连接mongodb

    clojure 连接 mongodb示例 project.clj 文件添加monger依赖: [com.novemberain/monger "1.5.0"] [css] view ...

  6. Clojure 学习入门(7)- 连接mysql

    Clojure的contrib包中实现了对现有JDBC的封装,在wiki上有连接,该页面上包含了对不同的数据库的连接方法和基本的操作,但是这个页面上没有提供足够的信息,足够一个初学者能够使用Cloju ...

  7. Clojure 学习入门(1) - 学习资料

    转自:http://blog.csdn.net/ithomer/article/details/17225813 Clojure(发音类似"closure",['kləʊʒə(r) ...

  8. Clojure 学习入门(18)—— 数据类型

    如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号.函数.或者参数的数据类型.但是,所有的值仍然有一个类型.字符串时是字符串,数字是数字,列表是列表,等等. ...

  9. Clojure 学习入门(8)—— 连接mongodb

    clojure 连接 mongodb示例 project.clj 文件添加monger依赖: [com.novemberain/monger "1.5.0"] (defprojec ...

最新文章

  1. Linux下ipconfig分析及C语言实现
  2. 一起学 c++(二)
  3. 【转】SAP采购订单屏幕增强
  4. mc服务器如何开修改物品开挂,如何在我的世界电脑服务器开挂
  5. kakfa中的ISR解释
  6. Blazor带我重玩前端(六)
  7. java某个参数值设置为空_@PathVariable为空时指定默认值的操作
  8. 把pdf转为高清jpg图片,其dpi为300以上
  9. android+excel软件,Android版Office办公软件Excel应用
  10. 关于使用迅雷下载百度云盘文件的教程
  11. 22春天津大学《财务会计》在线作业2
  12. 计算机是好是坏英语作文,电脑游戏是好还是坏英语作文
  13. Django 创建随机验证码
  14. pr学习心得(入门篇)
  15. android RatingBar基本使用介绍
  16. MySQL 实现无数据插入有数据更新
  17. Xutils中网络请求
  18. DataGrid 数据绑定使用小结二(自定义列)
  19. Pyton接口自动化相关【易报错问题及解决方法】
  20. 极客手中的利器Electron

热门文章

  1. [一句秒懂]小马的单例
  2. 在redhat/centos的linux环境下安装配置java web运行环境
  3. Win8 Metro App里玩XNA:ContentPipeline内容管线问题
  4. 软件以人为本1 - 序 - 写于上海2011 ScrumGathering会后
  5. Android程序员必备精品资源
  6. 手机html文件转TXT,Html 转换 Txt
  7. 基于持久层框架hibernate用SpringMVC增删功能
  8. mysql 一条sql 事务_MySQL的事务
  9. sql注入pythonpoco_骑士CMS后台SQL注入 | CN-SEC 中文网
  10. springcloud- FeginClient 调用统一拦截添加请求头 RequestInterceptor ,被调用服务获取请求头...