Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List 将向量元素与相应的列表交错以创建新的向量_List_Vector_Clojure - Fatal编程技术网

List 将向量元素与相应的列表交错以创建新的向量

List 将向量元素与相应的列表交错以创建新的向量,list,vector,clojure,List,Vector,Clojure,我有以下格式的数据: [["i1" "i2"] ['("A" "B" "C" "D") '("red" "blue" "green" "yellow")]] 我想将其转换为新的数据结构: [["column" "value"] ["i1" "A"] ["i1" "B"] ["i1" "C"] ["i1" "D"] ["i2" "red"] ["i2" "blue"] ["i2" "green"] ["i2" "yellow"]] 对这个难题的任何帮助都将是巨大的 我尝试使用

我有以下格式的数据:

[["i1" "i2"]
 ['("A" "B" "C" "D") '("red" "blue" "green" "yellow")]]
我想将其转换为新的数据结构:

[["column" "value"]
 ["i1" "A"]
 ["i1" "B"]
 ["i1" "C"]
 ["i1" "D"]
 ["i2" "red"]
 ["i2" "blue"]
 ["i2" "green"]
 ["i2" "yellow"]]
对这个难题的任何帮助都将是巨大的


我尝试使用嵌套的“for”语句进行far,但是我无法获得与头向量相同级别的结果向量,尽管我多次尝试转换结果。我还对列的值使用了“interleave”和“repeat”,但这也会在错误的级别创建列表

不是惯用语,但成功了

(defn doit [[is vss]]
  (vec (cons
         ["column" "value"]
         (mapcat (fn [i vs] (mapv (fn [v] [i v]) vs)) is vss))))
((fn [coll]
   (let [ks (first coll) vs (last coll)]
     (cons 
      '("column" "value")
      (partition 2 (concat
                    (interleave (repeat (first ks)) (first vs))
                    (interleave (repeat (last ks)) (last vs)))))))
 [["i1" "i2"]
  ['("A" "B" "C" "D") '("red" "blue" "green" "yellow")]])

不是惯用的,但确实做到了

((fn [coll]
   (let [ks (first coll) vs (last coll)]
     (cons 
      '("column" "value")
      (partition 2 (concat
                    (interleave (repeat (first ks)) (first vs))
                    (interleave (repeat (last ks)) (last vs)))))))
 [["i1" "i2"]
  ['("A" "B" "C" "D") '("red" "blue" "green" "yellow")]])
你的例子是:

(conform [["i1" "i2"] ['("A" "B" "C" "D") '("red" "blue" "green" "yellow")]])
=> (["i1" "A"] ["i1" "B"] ["i1" "C"] ["i1" "D"]
    ["i2" "red"] ["i2" "blue"] ["i2" "green"] ["i2" "yellow"])
奖金:

(conform [["i1" "i2"]
          ['("A" "B" "C" "D") '("red" "blue" "green" "yellow")]
          ['("E" "F" "G" "H") '("Mara" "Lara" "Clara" "Foxy")]])

=> (["i1" "A"] ["i1" "B"] ["i1" "C"] ["i1" "D"] 
    ["i2" "red"] ["i2" "blue"] ["i2" "green"] ["i2" "yellow"] 
    ["i1" "E"] ["i1" "F"] ["i1" "G"] ["i1" "H"] 
    ["i2" "Mara"] ["i2" "Lara"] ["i2" "Clara"] ["i2" "Foxy"])
更多奖金:

(conform [["i1" "i2" "i3"]
          ['("A" "B" "C" "D") '("red" "blue" "green" "yellow") ["Ufo"]]
          ['("E" "F" "G" "H") '("Mara" "Lara" "Clara" "Foxy") ["Orange" "Apple"]]])

=> (["i1" "A"] ["i1" "B"] ["i1" "C"] ["i1" "D"] 
    ["i2" "red"] ["i2" "blue"] ["i2" "green"] ["i2" "yellow"] 
    ["i3" "Ufo"] 
    ["i1" "E"] ["i1" "F"] ["i1" "G"] ["i1" "H"] 
    ["i2" "Mara"] ["i2" "Lara"] ["i2" "Clara"] ["i2" "Foxy"] ["i3" "Orange"] ["i3" "Apple"])
根据结果创建地图很容易:

(reduce (fn [acc [k v]]
          (update-in acc [k] (fnil conj []) v)) {} *1 )

=> {"i3" ["Ufo" "Orange" "Apple"], 
    "i2" ["red" "blue" "green" "yellow" "Mara" "Lara" "Clara" "Foxy"], 
    "i1" ["A" "B" "C" "D" "E" "F" "G" "H"]}
你的例子是:

(conform [["i1" "i2"] ['("A" "B" "C" "D") '("red" "blue" "green" "yellow")]])
=> (["i1" "A"] ["i1" "B"] ["i1" "C"] ["i1" "D"]
    ["i2" "red"] ["i2" "blue"] ["i2" "green"] ["i2" "yellow"])
奖金:

(conform [["i1" "i2"]
          ['("A" "B" "C" "D") '("red" "blue" "green" "yellow")]
          ['("E" "F" "G" "H") '("Mara" "Lara" "Clara" "Foxy")]])

=> (["i1" "A"] ["i1" "B"] ["i1" "C"] ["i1" "D"] 
    ["i2" "red"] ["i2" "blue"] ["i2" "green"] ["i2" "yellow"] 
    ["i1" "E"] ["i1" "F"] ["i1" "G"] ["i1" "H"] 
    ["i2" "Mara"] ["i2" "Lara"] ["i2" "Clara"] ["i2" "Foxy"])
更多奖金:

(conform [["i1" "i2" "i3"]
          ['("A" "B" "C" "D") '("red" "blue" "green" "yellow") ["Ufo"]]
          ['("E" "F" "G" "H") '("Mara" "Lara" "Clara" "Foxy") ["Orange" "Apple"]]])

=> (["i1" "A"] ["i1" "B"] ["i1" "C"] ["i1" "D"] 
    ["i2" "red"] ["i2" "blue"] ["i2" "green"] ["i2" "yellow"] 
    ["i3" "Ufo"] 
    ["i1" "E"] ["i1" "F"] ["i1" "G"] ["i1" "H"] 
    ["i2" "Mara"] ["i2" "Lara"] ["i2" "Clara"] ["i2" "Foxy"] ["i3" "Orange"] ["i3" "Apple"])
根据结果创建地图很容易:

(reduce (fn [acc [k v]]
          (update-in acc [k] (fnil conj []) v)) {} *1 )

=> {"i3" ["Ufo" "Orange" "Apple"], 
    "i2" ["red" "blue" "green" "yellow" "Mara" "Lara" "Clara" "Foxy"], 
    "i1" ["A" "B" "C" "D" "E" "F" "G" "H"]}

这里有一些有趣的答案。我只想在概念上补充一点,我认为这是一个很好的地方。对于第一个向量中的每个项目,您希望将其与第二个向量中相应列表中的项目配对

(defn convert [[cols vals]]
    (vec (cons ["column" "value"] ;; turn the list into a vector.
            (for [i (range (count cols)) ;; i <- index over columns
                  j (nth vals i)] ;; j <- items from the ith list
              [(nth cols i) j])))) ;; [col val]

user=>(convert data)

这里有一些有趣的答案。我只想在概念上补充一点,我认为这是一个很好的地方。对于第一个向量中的每个项目,您希望将其与第二个向量中相应列表中的项目配对

(defn convert [[cols vals]]
    (vec (cons ["column" "value"] ;; turn the list into a vector.
            (for [i (range (count cols)) ;; i <- index over columns
                  j (nth vals i)] ;; j <- items from the ith list
              [(nth cols i) j])))) ;; [col val]

user=>(convert data)

如果你先亲自尝试,人们会更感激你,也会更愿意帮助你,并分享你尝试过的东西。你必须引用以下列表:
['(“A”“B”“C”“D”)(“红色”“蓝色”“绿色”“黄色”)]
@shaktiman谢谢你。我添加了这些信息。@谢谢,这是我的一个常见错误。如果您先亲自尝试,人们会更加感激您,并愿意为您提供更多帮助,同时分享您尝试的内容。您必须引用以下列表:
['(“a”“B”“C”“D”)(“红色”“蓝色”“绿色”“黄色”)]
@shaktiman谢谢。我添加了信息。@谢谢,这是我的一个常见错误。已更正。以前的错误版本被完全否决。已更正。上一个错误的版本完全被否决。您的
for
构造是错误的。在
j
中,您正在迭代各个单词的字母。还有,为什么要搞索引?还有,我之所以使用索引,是因为我们不想将
cols
中的每个项目与
vals
中每个列表中的项目配对,我想让
for
完成大部分工作。为什么?因为我看到了四个答案,其中三个几乎完全相同,没有一个使用了
for
。答案没有错,但我们不是来为人们编写代码的,我们是来教书的。对不起,我的错。我发誓我在我的REPL中尝试过,今天早上看到了不同的结果-@galdre我要感谢你使用“for”。我花了很长时间想让它工作,但没能。我认为MAPCAT和CONS是我丢失的部分,我没有考虑的事情。这很有启发性。你的
for
构造是错误的。在
j
中,您正在迭代各个单词的字母。还有,为什么要搞索引?还有,我之所以使用索引,是因为我们不想将
cols
中的每个项目与
vals
中每个列表中的项目配对,我想让
for
完成大部分工作。为什么?因为我看到了四个答案,其中三个几乎完全相同,没有一个使用了
for
。答案没有错,但我们不是来为人们编写代码的,我们是来教书的。对不起,我的错。我发誓我在我的REPL中尝试过,今天早上看到了不同的结果-@galdre我要感谢你使用“for”。我花了很长时间想让它工作,但没能。我认为MAPCAT和CONS是我丢失的部分,我没有考虑的事情。这很有启发性。