这有什么区别:
(keySet (map (keyword :number) queryResult)
和此:
(keySet (map #(get % "number") queryResult)
答案 0 :(得分:4)
首先,您的第一个示例中的(keyword :number)
是多余的,因为keyword
将其参数转换为关键字,:number
已经是关键字。这将你的第一个例子简化为:
(keySet (map :number queryResult))
当关键字用作函数时,它返回第一个参数的键的关联值,如果不存在,则返回nil
:
user=> (:number {:a "Hi" :number 23})
23
user=> (:number {:a "Hi" :ldsf 23})
nil
因此,第一个示例返回将keySet
应用于:number
中queryResult
字段序列的结果。
另一方面,您的第二个示例会将keySet
应用于"number"
的所有queryResult
字段的序列。
请注意,第一个示例会查找关键字:number
,而第二个示例会查找字符串"number"
。
当然:number
≠"number"
:
user=> (= :number "number")
false
答案 1 :(得分:0)
第一个将在queryResult的每个项目中查找关键字:number
,而第二个将查找字符串"number"
。您想要使用的将取决于地图中的键的类型。