Я пытаюсь вывести значения из сложной структуры списка.Вытягивание значений из сложных списков в Clojure
Учитывая то вроде этого:
[{:a "whatever" :b [:c "foo"]} :e {:f "boo"} :g {:h [:i 62281]}]
Я хотел бы получить:
["whatever" "foo" "boo" 62281]
До сих пор я только добрался до этой точки:
((62281) nil (boo) nil whatever foo)
Вот код:
(defn get-values [params]
(apply conj
(map (fn [part]
(if (not (keyword? part))
(map (fn [v]
(if (vector? v)
(last v)
v))
(vals part))))
params)))
- Я не могу избавиться от ноль-х
- Я не могу понять, почему значения после определенного момента в списках.
- Я полагаю, что это лучший способ сделать это.
«Исправить данные» на самом деле не все, что полезно, так как вы не знаете контекста, но вторая часть выполняет эту работу, и я сам буду ее прорывать, чтобы точно видеть, что вы там делали. Благодарю. –
Несомненно, но предоставленные вами данные не требовали его структуры. Никакой ключ не повторялся, никакое внутреннее сопоставление не содержало более одного ключа, и каждый вектор составлял 2 элемента, начинающихся с ключевого слова. Учитывая эти ограничения, неудобно представлять данные таким образом. Вместо того, чтобы пытаться проанализировать структуру данных, которую вы предоставили, я бы потратил свое время, пытаясь понять, почему у меня есть эта структура данных в первую очередь. – ToBeReplaced
Мне хорошо известно, как выглядит структура данных и как она может быть разной/лучшей, но мой вопрос заключался в том, как можно было бы разобрать сложный список, независимо от того, как и почему у меня есть этот список. То, что вы говорите, сродни словам «Не входите в одного». когда парень спрашивает, как он может достать машину из канавы. Это очевидно, но не особенно полезно или образовательно. –