CLOJURE:如何以天为单位查找日期差异,以及在CLOJURE中执行嵌套循环的优化方法
我是Clojure的新手,尝试做一些简单的验证,以验证学生完成的课程在几天内有差距,如果有,那么有多少天 如果希望迭代课程并查找课程1和课程2之间的差异超过20天的课程,可通过查找(课程2的开始日期-课程1的结束日期)之间的差异来完成 这是我的测试数据集,两者之间的间隔超过20天 高级科学-102和数据科学-101课程CLOJURE:如何以天为单位查找日期差异,以及在CLOJURE中执行嵌套循环的优化方法,clojure,Clojure,我是Clojure的新手,尝试做一些简单的验证,以验证学生完成的课程在几天内有差距,如果有,那么有多少天 如果希望迭代课程并查找课程1和课程2之间的差异超过20天的课程,可通过查找(课程2的开始日期-课程1的结束日期)之间的差异来完成 这是我的测试数据集,两者之间的间隔超过20天 高级科学-102和数据科学-101课程 [{:course-type "basic-science-101" :start-date "2020-01-01" :end-
[{:course-type "basic-science-101"
:start-date "2020-01-01"
:end-date "2020-05-01"}
{:course-type "advanced-science-102"
:start-date "2020-05-15"
:end-date "2020-10-01"}
{:course-type "datascience-science-101"
:start-date "2020-12-01"
:end-date "2021-03-20"}
]
到目前为止,我已经有了这段代码,我正在迭代这些课程,并试图找出两门课程的开始日期和结束日期之间的差异,以确定这两门课程之间是否存在任何差距
(ns student-course-ruleset.courses-test
(:require [java-time :as jt]))
(def mycourses [{:course-type "basic-science-101"
:start-date "2020-01-01"
:end-date "2020-05-01"}
{:course-type "advanced-science-102"
:start-date "2020-05-20"
:end-date "2020-10-01"}
{:course-type "datascience-science-101"
:start-date "2020-11-15"
:end-date "2021-01-20"}])
(defn select-values [map ks]
(remove nil? (reduce #(conj %1 (map %2)) [] ks)))
(defn find-gap-in-course [mycourses]
(loop [[course1 & mycourses] mycourses]
(loop [[course2 & mycourses] mycourses]
(when (and (not-empty course1) (not-empty course2))
(println "Finding gap of courses : " course1 course2)
(println "Current courses in comparison are : " (select-values course1 [:course-type])
(select-values course2 [:course-type]))
(println "Finding Gap in courses: ")
;; (jt/gap (select-values course2 [:start-date]) (select-values course1 [:end-date]))
)
)
(if course1 (recur mycourses))
))
(find-gap-in-course mycourses)
您可以从clj时间使用(t/间隔)进行测试
你试过什么?你的算法是什么?目前还不清楚这是一个与Clojure相关的问题,只是您使用了Clojure符号表示数据。我使用了(acc/all)并获取了此学生课程信息列表,现在我一直在思考如何迭代向量集,然后将当前集的开始日期与前一集的结束日期进行比较。您好,你可能想重组你的问题,这样你想做的事情就更清楚了。在这种情况下,您可能想说您需要帮助解析日期,或者您不知道如何提取日期请在此处查看“如何提出一个好问题”:对于您的问题,请参阅此模板项目中的文档列表,特别是获取Clojure和Clojure备忘单:对于您的问题,您需要
java.time.LocalDate/parse
,然后java.time.Period/between
。