我的答案与 mtyaka 的答案非常相似,但在我看来,它更短,更模块化。
(map (fn [& vs] (zipmap [:id :name :type] vs))
(id1 id2 id3 ...)
(name1 name2 name3 ...)
(type1 type2 type3 ...))
在这里,zipmap
使用固定键序列和可变值序列创建地图,在“第一步”期间将是(id1 name1 type1)
,在“第二步”期间将是(id2 name2 type2)
等等。
这仅在您的三个惰性序列彼此隔离时才有效。如果您有一系列惰性序列,即((id1 id2 ...) (name1 name2 ...) (type1 type2 ...))
,那么您将不得不对apply
这个序列进行上述操作,如下所示:
(apply map (fn [& vs] (zipmap [:id :name :type] vs))
((id1 id2 id3 ...)
(name1 name2 name3 ...)
(type1 type2 type3 ..)))
在这里,apply
只是简单地将代码添加map (fn [& vs] (zipmap [:id :name :type] vs))
到惰性序列序列的前面,这成为要评估的表达式。换句话说,它产生的表达式与第一个代码块完全相同。