Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 使用向量更新记录_Clojure - Fatal编程技术网

Clojure 使用向量更新记录

Clojure 使用向量更新记录,clojure,Clojure,如何使用其元素更新记录 (pprint records) ({:Name "John" :Age 12 :Index 123 :Class_Index} {:Name "Joe" :Age 13 :Index 3 :Class_Index} {:Name "Jon" :Age 14 :Index 4 :Class_Index}) 如何编写一个函数,使class_索引基于age+索引进行更新。同时可以更新记录,以便在运行函数后,输出如下所示 (pprint records) ({:Name

如何使用其元素更新记录

(pprint records)
({:Name "John" :Age 12 :Index 123 :Class_Index}
 {:Name "Joe" :Age 13 :Index 3 :Class_Index}
 {:Name "Jon" :Age 14 :Index 4 :Class_Index})
如何编写一个函数,使class_索引基于age+索引进行更新。同时可以更新记录,以便在运行函数后,输出如下所示

(pprint records)
({:Name "John" :Age 12 :Index 123 :Class_Index 135}
 {:Name "Joe" :Age 13 :Index 3 :Class_Index 16}
 {:Name "Jon" :Age 14 :Index 4 :Class_Index 18})
但是,我无法手动键入记录的所有元素,因为它将包含太多的行。你答案中的功能还能用吗?pprint仅用于说明。实际上,我的记录将包含许多元素


从某种意义上讲(def记录(atom[records]),或者我必须遍历占用太多内存的行。有没有更有效的方法

如果您总是要立即更新记录

(def records (atom [(->Record "John" 12 123 nil)
                    (->Record "Joe" 13 3 nil)
                    (->Record "Jon" 14 4 nil)]))

(reset! records (map #(assoc % :Class_Index (+ (:Age %) (:Index %)))
                     @records))

(pprint records)
-> #<Atom@131bf42: 
     ({:Name "John", :Age 12, :Index 123, :Class_Index 135}
      {:Name "Joe", :Age 13, :Index 3, :Class_Index 16}
      {:Name "Jon", :Age 14, :Index 4, :Class_Index 18})>
或者如果有物品的来源

(def records (atom (source-fn ...)))

在这种情况下,没有内存开销。代码的其余部分将是相同的。

请记住,在Clojure的上下文中,记录是构建地图的一种方式(我猜您指的是数据库中的记录)。关于你的问题:

    ; The database
(def people [
  {:Name "John" :Age 12 :Index 123}
  {:Name "Joe" :Age 13 :Index 3}
  {:Name "Jon" :Age 14 :Index 4}])

; Calculates the class index for a person and returns the updated person
(defn class-index [{:keys [Age Index] :as person}]
    (assoc person :Class_Index (+ Age Index)))

; Calculate the class index for all people
(pprint (map class-index people))

; Output
; ({:Name "John", :Age 12, :Class_Index 135, :Index 123}
; {:Name "Joe", :Age 13, :Class_Index 16, :Index 3}
; {:Name "Jon", :Age 14, :Class_Index 18, :Index 4})

我已经编辑了我的问题,请原谅我对我问题的拙劣解释
(def records (atom (source-fn ...)))
    ; The database
(def people [
  {:Name "John" :Age 12 :Index 123}
  {:Name "Joe" :Age 13 :Index 3}
  {:Name "Jon" :Age 14 :Index 4}])

; Calculates the class index for a person and returns the updated person
(defn class-index [{:keys [Age Index] :as person}]
    (assoc person :Class_Index (+ Age Index)))

; Calculate the class index for all people
(pprint (map class-index people))

; Output
; ({:Name "John", :Age 12, :Class_Index 135, :Index 123}
; {:Name "Joe", :Age 13, :Class_Index 16, :Index 3}
; {:Name "Jon", :Age 14, :Class_Index 18, :Index 4})