Clojure 学习入门(12)- map/pmap
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
Clojure 学习入门(12)- map/pmap相关推荐
- Clojure 学习入门(6)- 函数定义
一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下: [python] view plaincopy print? user=> (fn [] "hello&quo ...
- Clojure 学习入门(6)—— 函数定义
一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下: user=> (fn [] "hello") #<user$eval375$fn__376 us ...
- Clojure 学习入门(13)- binding
Clojure里面是不支持变量的.Binding跟变量有点像,但是在被赋值之前是不允许改的,包括:全局binding, 线程本地(thread local)binding, 以及函数内的本地bindi ...
- Clojure 学习入门(10)- httpkit
Http-kit 是主要由Java 和 Clojure开发,为Clojure定制的零依赖的HTTP lib,仅用3000多行代码,实现了高性能 Server,Client,Timer.代码量少,实现简 ...
- Clojure 学习入门(8)- 连接mongodb
clojure 连接 mongodb示例 project.clj 文件添加monger依赖: [com.novemberain/monger "1.5.0"] [css] view ...
- Clojure 学习入门(7)- 连接mysql
Clojure的contrib包中实现了对现有JDBC的封装,在wiki上有连接,该页面上包含了对不同的数据库的连接方法和基本的操作,但是这个页面上没有提供足够的信息,足够一个初学者能够使用Cloju ...
- Clojure 学习入门(1) - 学习资料
转自:http://blog.csdn.net/ithomer/article/details/17225813 Clojure(发音类似"closure",['kləʊʒə(r) ...
- Clojure 学习入门(18)—— 数据类型
如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号.函数.或者参数的数据类型.但是,所有的值仍然有一个类型.字符串时是字符串,数字是数字,列表是列表,等等. ...
- Clojure 学习入门(8)—— 连接mongodb
clojure 连接 mongodb示例 project.clj 文件添加monger依赖: [com.novemberain/monger "1.5.0"] (defprojec ...
最新文章
- Linux下ipconfig分析及C语言实现
- 一起学 c++(二)
- 【转】SAP采购订单屏幕增强
- mc服务器如何开修改物品开挂,如何在我的世界电脑服务器开挂
- kakfa中的ISR解释
- Blazor带我重玩前端(六)
- java某个参数值设置为空_@PathVariable为空时指定默认值的操作
- 把pdf转为高清jpg图片,其dpi为300以上
- android+excel软件,Android版Office办公软件Excel应用
- 关于使用迅雷下载百度云盘文件的教程
- 22春天津大学《财务会计》在线作业2
- 计算机是好是坏英语作文,电脑游戏是好还是坏英语作文
- Django 创建随机验证码
- pr学习心得(入门篇)
- android RatingBar基本使用介绍
- MySQL 实现无数据插入有数据更新
- Xutils中网络请求
- DataGrid 数据绑定使用小结二(自定义列)
- Pyton接口自动化相关【易报错问题及解决方法】
- 极客手中的利器Electron
热门文章
- [一句秒懂]小马的单例
- 在redhat/centos的linux环境下安装配置java web运行环境
- Win8 Metro App里玩XNA:ContentPipeline内容管线问题
- 软件以人为本1 - 序 - 写于上海2011 ScrumGathering会后
- Android程序员必备精品资源
- 手机html文件转TXT,Html 转换 Txt
- 基于持久层框架hibernate用SpringMVC增删功能
- mysql 一条sql 事务_MySQL的事务
- sql注入pythonpoco_骑士CMS后台SQL注入 | CN-SEC 中文网
- springcloud- FeginClient 调用统一拦截添加请求头 RequestInterceptor ,被调用服务获取请求头...