Clojure 学习入门(12)—— map/pmap
来源:互联网 发布:淘宝大图轮播尺寸 编辑:程序博客网 时间:2024/05/16 11:31
clojure map数据结构的常用方法,小结一下
map 各种排序
(println (sorted-map-by > 1 "a", 2 "b", 3 "c")) ;; {3 c, 2 b, 1 a};; 相等 value 取一个(let [results {:A 1 :B 2 :C 2 :D 5 :E 1 :F 1}] (println (into (sorted-map-by (fn [key1 key2] (compare (get results key2) (get results key1)))) results))) ;; {:D 5, :C 2, :A 1};; 全不等 value (let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}] (println (into (sorted-map-by (fn [key1 key2] (compare (get results key2) (get results key1)))) results))) ;; {:D 6, :C 5, :F 4, :E 3, :B 2, :A 1};; value 升序(let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}] (println (into (sorted-map-by (fn [key1 key2] (compare [(get results key1) key1] [(get results key2) key2]))) results))) ;; {:A 1, :B 2, :E 3, :F 4, :C 5, :D 6};; value 降序(let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}] (println (into (sorted-map-by (fn [key1 key2] (compare [(get results key2) key2] [(get results key1) key1]))) results))) ;; {:D 6, :C 5, :F 4, :E 3, :B 2, :A 1};; value 升序(let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}] (println (into (sorted-map-by (fn [key1 key2] (compare [(get results :key1) key1] [(get results :key2) key2]))) results))) ;; {:A 1, :B 2, :C 5, :D 6, :E 3, :F 4};; value 降序(let [results {:A 1 :B 2 :F 4 :E 3 :D 6 :C 5}] (println (into (sorted-map-by (fn [key1 key2] (compare [(get results :key2) key2] [(get results :key1) key1]))) results))) ;; {:F 4, :E 3, :D 6, :C 5, :B 2, :A 1};; 默认升序排列(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}));; {: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};; 取排序后最末一个(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})));; [:2013-12-24 0];; 自定义key降序排序(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}] (println (into (sorted-map-by (fn [key1 key2] (compare [(get results :key2) key2] [(get results :key1) key1]))) results))) ;; {: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}
先排序后取值
;; 先对日期排序,然后取前num天(defn take-sort-data [data num] (let [ result-sorted (into (sorted-map-by (fn [key1 key2] (compare [(get data :key2) key2] [(get data :key1) key1]))) data) ;; 对日期排序 result (select-keys result-sorted (take num (keys result-sorted)))] (println "data = " data) (println "result-sorted = " result-sorted) (println "result = " result) (println "json/write-str result = " (json/write-str result))) )(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}] (take-sort-data data 6) (take-sort-data data 4) );; (take-sort-data data 6) 's result;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};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};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};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};;; (take-sort-data data 4) 's result;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};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};result = {:2013-12-21 0, :2013-12-22 0, :2013-12-23 0, :2013-12-24 0};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
2 0
- Clojure 学习入门(12)—— map/pmap
- Clojure 学习入门(12)- map/pmap
- Clojure 学习入门(1)—— 学习资料
- Clojure 学习入门(2)—— eclipse 插件
- Clojure 学习入门(6)—— 函数定义
- Clojure 学习入门(5)—— 关键字
- Clojure 学习入门(3)—— 数字类型
- Clojure 学习入门(4)—— 字符串
- Clojure 学习入门(16)—— 正则表达式
- Clojure 学习入门(15)—— 条件判断
- Clojure 学习入门(17)—— 异常处理
- Clojure 学习入门(14)—— 循环控制
- Clojure 学习入门(7)—— 连接mysql
- Clojure 学习入门(8)—— 连接mongodb
- Clojure 学习入门(9)—— 连接redis
- Clojure 学习入门(13)—— binding
- Clojure 学习入门(10)—— httpkit
- Clojure 学习入门(11)—— 宏 macro
- Hive的JDBC接口实现(Eclipse环境配置)
- 补遗篇之单行道标志const
- linux中fork函数详解
- Leetcode: Binary Tree Postorder Traversal - 再解
- 判断质数
- Clojure 学习入门(12)—— map/pmap
- 10-排序-03-选择排序
- 文本特征提取方法研究
- NDK开发环境搭建_r8
- 在Windows Azure上基于CentOS 6.3部署MySQL 5.6主从式数据库(1)
- 二叉树的最近父结点的查找(Least Common Ancestor)
- Linux基础.控制台式查看日志
- LeetCode | String to Integer (atoi)
- linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结