首页 > 解决方案 > CLOJURE:如何在几天内找到日期差异以及在 Clojure 中进行嵌套循环的优化方式

问题描述

我是 Clojure 的新手,并试图做一些简单的验证来验证学生完成的课程在几天内有差距,如果有,那么有多少天。

想要遍历课程并找到课程 1 和课程 2 之间的差异超过 20 天的课程,这将通过找到(课程 2 的开始日期 - 课程 1 的结束日期)之间的差异来完成

这是我的测试数据集,advanced-science-102 和 datascience-science-101 课程之间有超过 20 天的差距。

[{: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)

标签: clojure

解决方案


您可以使用 clj-time 中的 (t/interval) 进行测试

https://github.com/clj-time/clj-time


推荐阅读