【发布时间】:2016-08-11 18:03:42
【问题描述】:
我有以下数据:
({:seriesId "series 0", :episodeId "0"}
{:seriesId "series 1", :episodeId "1"}
{:seriesId "series 1", :episodeId "2"}
{:seriesId "series 2", :episodeId "3"}
{:seriesId "series 2", :episodeId "4"}
{:seriesId "series 2", :episodeId "5"})
并希望将每一集与其系列相关联,如下所示:
[{:put-request
{:item {:seriesId "series 0", :episodeCount 1, :episodeIds #{"0"}}}}
{:put-request
{:item {:seriesId "series 1", :episodeCount 2, :episodeIds #{"1" "2"}}}}
{:put-request
{:item {:seriesId "series 2", :episodeCount 3, :episodeIds #{"3" "4" "5"}}}}]
目前我遇到以下问题:
[{:put-request
{:item {:seriesId "series 0", :episodeCount 1, :episodeIds #{"0"}}}}
{:put-request
{:item {:seriesId "series 1", :episodeCount 1, :episodeIds #{"1"}}}}
{:put-request
{:item {:seriesId "series 1", :episodeCount 1, :episodeIds #{"2"}}}}
{:put-request
{:item {:seriesId "series 2", :episodeCount 1, :episodeIds #{"3"}}}}
{:put-request
{:item {:seriesId "series 2", :episodeCount 1, :episodeIds #{"4"}}}}
{:put-request
{:item {:seriesId "series 2", :episodeCount 1, :episodeIds #{"5"}}}}]
我正在使用create-or-update-series 函数。我不知道如何使用seriesId 查找/获取以前添加的系列(如果添加!)。我尝试了很多东西,但这些都是死胡同。
(ns clojure-sscce.core
(:gen-class)
(:require clojure.pprint))
(defn create-or-update-series
([episodes]
(create-or-update-series episodes []))
([episodes result]
(if (zero? (count episodes))
result
(create-or-update-series (rest episodes)
(conj result {
:put-request {
:item {
:seriesId (:seriesId (first episodes))
:episodeCount 1
:episodeIds #{(:episodeId (first episodes))}}}})))))
;; Tests
(defn -main [& args]
(let
[series0 (mapv (fn [episode-id] {
:seriesId "series 0"
:episodeId (str episode-id)}) (range 0 1))
series1 (mapv (fn [episode-id] {
:seriesId "series 1"
:episodeId (str episode-id)}) (range 1 3))
series2 (mapv (fn [episode-id] {
:seriesId "series 2"
:episodeId (str episode-id)}) (range 3 6))]
(clojure.pprint/pprint
(concat series0 series1 series2))
(clojure.pprint/pprint
(create-or-update-series (concat series0 series1 series2)))))
请注意,{:put-request {:item { ... 是必需的,因为新映射预计将被 PUT 到 DynamoDB。
希望得到您的帮助!
【问题讨论】:
-
您是否喜欢使用字符串作为值?如果您可以使用整数,那可能会使这项任务更容易。
-
是的,
seriesId和episodeId必须是字符串。
标签: clojure