![](/img/trans.png)
[英]How to get the closest element in a vector for every element in another vector without duplicates?
[英]Clojure: how to get an element of a vector in another vector
我對Clojure非常陌生,在理解向量/列表/地圖的操作時遇到困難。 我正在嘗試打印出數據中所有客戶的姓名,但是我不知道該怎么做。 請幫忙。
(def data
"1|John Smith|123 Here Street|456-4567
2|Sue Jones|43 Rose Court Street|345-7867
3|Fan Yuhong|165 Happy Lane|345-4533")
(defn test
[]
(let [lines (str/split-lines data)
line-vecs-1 (mapv #(str/split % #"\|" ) lines)]
(for [x line-vector-c] (print (line-vector-c 1))
)
)
)
給我:
[2 Sue Jones 43 Rose Court Street 345-7867][2 Sue Jones 43 Rose Court Street
345-7867][2 Sue Jones 43 Rose Court Street 345-7867]
我想要的是:
"John Smith"
"Sue Jones"
"Fang Yuhong"
到目前為止(略作重寫),您將得到:
(mapv (fn [l]
(str/split l #"\|"))
(str/split-lines data))
(str/split-lines data)
將這些行分成一系列字符串:
["1|John Smith|123 Here Street|456-4567"
"2|Sue Jones|43 Rose Court Street|345-7867"
"3|Fan Yuhong|165 Happy Lane|345-4533"]
(mapv #(str/split % #"\\|") lines)
將每一行拆分為字符串元組:
[["1" "John Smith" "123 Here Street" "456-4567"]
["2" "Sue Jones" "43 Rose Court Street" "345-7867"]
["3" "Fan Yuhong" "165 Happy Lane" "345-4533"]]
現在,您想將字符串的每個元組僅轉換為每個元組的第二個元素。 您可以使用以下兩個函數: get
或nth
(都基於零)。
例如:
(mapv (fn [l]
(get (str/split l #"\|")
1))
(str/split-lines data))
您可以使用獲取名稱列表
(def names
(sequence
(comp
(map #(str/split % #"\|"))
(map second))
(str/split-lines data)))
然后用
(doseq [n names]
(println n))
我經常使用sequence
和組合換能器來探索數據,因為它一次可以一步一步建立轉換。
您可以分割每一行並像這樣獲得第二列
(defn test [xs]
(->> (str/split-lines xs) ;split lines
(map #(str/split % #"\|")) ;get columns
(map second))) ;only the second element of each line
並打印結果
(map println (test data))
或更好地使用劑量q僅用於打印
(doseq [n (test data)]
(println n))
(map second (re-seq #"\|(.*?)\|" data))
收益:
("John Smith" "Sue Jones" "Fan Yuhong")
我們要求re-seq
在每一行中找到一對|
之間的第一內容|
。 ?
在正則表達式中表示我們希望進行非貪婪搜索。
(re-seq #"\|(.*?)\|" data)
收益:
(["|John Smith|" "John Smith"] ["|Sue Jones|" "Sue Jones"] ["|Fan Yuhong|" "Fan Yuhong"])
最后,我們使用map second
訪問列表的每個元素,並僅獲取向量的第二個字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.