recursion - 如何在clojure中对嵌套序列进行排序?
问题描述
我有一个嵌套映射,其中键是数字,如下所示:
{:18 [Lan Yuhong 165 Happy Lane 345-4533], :33 [Man Yuhong 165 Happy Lane 345-4533], :3 [Tan Yuhong 165 Happy Lane 345-4533], :6 [Jan Yuhong 165 Happy Lane 345-4533], :5 [Han Yuhong 165 Happy Lane 345-4533], :7 [Fan Yuhong 165 Happy Lane 345-4533], :1 [Sue Jones 43 Rose Court Street 345-7867], :9 [John Smith 123 Here Street 456-4567]}
我想根据第一个条目(即键)进行排序,如下所示:
{:1 [Sue Jones 43 Rose Court Street 345-7867], :3 [Tan Yuhong 165 Happy Lane 345-4533], :5 [Han Yuhong 165 Happy Lane 345-4533], :6 [Jan Yuhong 165 Happy Lane 345-4533], :7 [Fan Yuhong 165 Happy Lane 345-4533], :9 [John Smith 123 Here Street 456-4567], :18 [Lan Yuhong 165 Happy Lane 345-4533], :33 [Man Yuhong 165 Happy Lane 345-4533]}
但是,每个列表中的第一个条目被视为字符串而不是整数,并sort/sort-by
返回按字典顺序排序的列表,如下所示。请注意,mps 存储在new-map
我程序的变量中。
(do
(into (sorted-map) new-map)
)
输出是:
([1 Sue Jones 43 Rose Court Street 345-7867] [18 Lan Yuhong 165 Happy Lane 345-4533] [3 Tan Yuhong 165 Happy Lane 345-4533] [33 Man Yuhong 165 Happy Lane 345-4533] [5 Han Yuhong 165 Happy Lane 345-4533] [6 Jan Yuhong 165 Happy Lane 345-4533] [7 Fan Yuhong 165 Happy Lane 345-4533] [9 John Smith 123 Here Street 456-4567])
我怎样才能在不使用任何循环的情况下做到这一点?我试图避免在这里使用循环。但是,递归函数是可以的。
解决方案
你几乎拥有它。只需添加:
(sort-by #(Integer/parseInt (first %)) new-list)
完整代码:
(ns tst.demo.core
(:use tupelo.core tupelo.test))
(dotest
(let [data [["18" "Lan Yuhong" "165" "Happy Lane" "345-4533"]
["33" "Man Yuhong" "165" "Happy Lane" "345-4533"]
["3" "Tan Yuhong" "165" "Happy Lane" "345-4533"]
["6" "Jan Yuhong" "165" "Happy Lane" "345-4533"]
["5" "Han Yuhong" "165" "Happy Lane" "345-4533"]
["7" "Fan Yuhong" "165" "Happy Lane" "345-4533"]
["1" "Sue Jones" "43" "Rose Court Street" "345-7867"]
["9" "John Smith" "123 Here Street" "456-4567"]]]
(spyx-pretty (sort-by #(Integer/parseInt (first %)) data))))
结果
(["1" "Sue Jones" "43" "Rose Court Street" "345-7867"]
["3" "Tan Yuhong" "165" "Happy Lane" "345-4533"]
["5" "Han Yuhong" "165" "Happy Lane" "345-4533"]
["6" "Jan Yuhong" "165" "Happy Lane" "345-4533"]
["7" "Fan Yuhong" "165" "Happy Lane" "345-4533"]
["9" "John Smith" "123 Here Street" "456-4567"]
["18" "Lan Yuhong" "165" "Happy Lane" "345-4533"]
["33" "Man Yuhong" "165" "Happy Lane" "345-4533"])
更新
对于您修改后的问题,请参阅函数 group-by
推荐阅读
- python - 为 SQL 语句准备 Python 元组
- javascript - Node js, mongoose 对数据库中的数据进行排序
- javascript - 如何动态引用对象变量?
- html - 使用 Flex-box 为 Material-UI 制作两个相同高度的网格项
- haskell - Haskell 函数将 Int 转换为 alpha numeration
- java - 是否可以使“标题/列”对表格视图中的行进行分组?
- objective-c - UISegmentedControl 确定当 momentary = YES 时点击哪个按钮
- elixir - 在 Elixir 中的函数调用之间保留变量值
- jquery - 如何在 jquery ajax 中解码 base 64 json 图像?
- utf-8 - Apex 错误(图像到 PDF 的转换):BLOB 不是有效的 UTF-8 字符串