我的答案与 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))到惰性序列序列的前面,这成为要评估的表达式。换句话说,它产生的表达式与第一个代码块完全相同。