Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vector Clojure:如何在另一个向量中获取向量的元素_Vector_Clojure_Maps - Fatal编程技术网

Vector Clojure:如何在另一个向量中获取向量的元素

Vector Clojure:如何在另一个向量中获取向量的元素,vector,clojure,maps,Vector,Clojure,Maps,我对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 dat

我对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数据将行拆分为字符串序列:

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

到目前为止,您已经稍微重写了以下内容:

(mapv (fn [l]
        (str/split l #"\|"))
      (str/split-lines data))
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"]
[["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"]
[["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))

我经常使用序列和组合传感器来探索数据,因为一步一步地构建转换非常方便。

您可以使用

(def names
  (sequence
    (comp
      (map #(str/split % #"\|"))
      (map second))
    (str/split-lines data)))
然后将每个名字打印出来

(doseq [n names]
  (println n))

我经常使用序列和组合传感器来探索数据,因为它便于一步一步地建立转换。

您可以拆分每一行,然后像这样得到第二列

(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))
或者最好仅将doseq用于打印

(doseq [n (test data)]
  (println n))

您可以拆分每一行,得到第二列,如下所示

(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))
或者最好仅将doseq用于打印

(doseq [n (test data)]
  (println n))
使用正则表达式: 映射第二个重新排序\|.\\\\数据 返回:

约翰·史密斯·苏·琼斯·范宇红 解释: 重新排序 我们要求re-seq在每一行找到一对|之间的第一个内容。这个在正则表达式中,这意味着我们需要一个非贪婪的搜索

重新排序\|.*\\\数据 返回:

[约翰·史密斯[约翰·史密斯][苏·琼斯[苏·琼斯][范宇红[范宇红] 地图 最后,我们使用map second访问列表中的每个元素,并仅获取向量的第二个字符串。

使用正则表达式: 映射第二个重新排序\|.\\\\数据 返回:

约翰·史密斯·苏·琼斯·范宇红 解释: 重新排序 我们要求re-seq在每一行找到一对|之间的第一个内容。这个在正则表达式中,这意味着我们需要一个非贪婪的搜索

重新排序\|.*\\\数据 返回:

[约翰·史密斯[约翰·史密斯][苏·琼斯[苏·琼斯][范宇红[范宇红] 地图
最后,我们使用map second访问列表中的每个元素,并仅获取向量的第二个字符串。

您看过所有其他类似问题了吗?看起来你们很多人都在同一个班上,或者有着相同的家庭作业。单击Clojure标记,查看问题,因为这基本上已经回答了好几次。line-vector-c未定义。此外,for是惰性的,不建议用于打印等副作用。通常,最好将数据视为存在于Clojure数据结构中,在本例中是一个向量或映射序列。然后问题分为两部分:1。将数据转换成这样的形式,然后2。推导并给出答案。你看过所有其他类似的问题了吗?看起来你们很多人都在同一个班上,或者有着相同的家庭作业。单击Clojure标记,查看问题,因为这基本上已经回答了好几次。line-vector-c未定义。此外,for是惰性的,不建议用于打印等副作用。通常,最好将数据视为存在于Clojure数据结构中,在本例中是一个向量或映射序列。然后问题分为两部分:1。将数据转换成这样的形式,然后2。推导并给出答案。