list - 如何合并两个列表中的元素

标签 list clojure maps

我想合并两个列表中的元素,我的程序是这样的

(ns datamodel

(:use 
[net.cgrand.enlive-html :as en-html ])
(:require
[clojure.zip :as z] 
[clojure.data.zip.xml :only (attr text xml->) :as xz]
[clojure.xml :as xml ]
[clojure.data.zip.xml :as zf]
 [clojure.java.io :as io]
))
(def data-url "http://api.eventful.com/rest/events/search?app_key=4H4Vff4PdrTGp3vV&keywords=music&location=Belgrade&date=Future")
(defn map-tags-contents [url & tags]
  (map #(hash-map % (keyword (last tags)))
   (mapcat (comp :content z/node)
      (apply xz/xml->
             (-> url xml/parse z/xml-zip)
              (for [t tags]
                 (zf/tag= t)
               )))))
(def titles (map-tags-contents data-url :events :event :title))
(def descriptions (map-tags-contents data-url :events :event :description))
(defn create-map [](for [el1 titles 
  el2 descriptions] (into {} (conj el1 el2 ))))

但是当我调用 create-map 时,列表中的结果 map 是重复的。我看到我得到了笛卡尔连接,因为我没有说明元素的组合方式。我希望将第一个 map 中的第一个元素和第二个 map 中的第一个元素组合在一起,将第一个 map 中的第二个元素和第二个 map 中的第二个元素组合起来,等等...

最佳答案

元素组合

(map list [1 2 3] [:a :b :c]) ;=> ((1 :a) (2 :b) (3 :c))

笛卡尔积

(for [x [1 2 3], y [:a :b :c]] (list x y))
;=> ((1 :a) (1 :b) (1 :c) (2 :a) (2 :b) (2 :c) (3 :a) (3 :b) (3 :c))

关于list - 如何合并两个列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16776243/

相关文章:

python - 按列表中的值对字典键进行排序?

Clojure Pedestal 根用作应用程序/八位字节流

java - 折线颜色不变

c++ - 如何访问使用引用给出的 map ?

list - 如何从 sql server 创建有关我的表的列表?

c# - 是什么导致 BindingList<T> 中的 ListChangedType.ItemMoved ListChange 事件?

clojure - 如何以惯用的clojure方式重复字符串n次?

javascript - 通过使用一些基于网络的代码(javascript、jquery、html 等)绘制 xy 坐标来创建零售店 map

c# - 简单的C# List<> : given the primary key, 如何查找和更新List<>中的嵌套对象属性?

clojure - 使用 Plumatic Sc​​hema 强制转换为 bigdec