簡體   English   中英

Clojure:如何在另一個向量中獲取向量的元素

[英]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"]]

現在,您想將字符串的每個元組僅轉換為每個元組的第二個元素。 您可以使用以下兩個函數: getnth (都基於零)。

例如:

(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))

使用RegEx:

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM