Я собрал функцию ниже. Предполагается взять вложенную (многоуровневую) карту и вернуть последовательность плоских карт; однако в настоящее время он возвращает последовательность внутри последовательности.
Кто-нибудь знает, почему последовательность вложена в другую последовательность?
(defn collapse [data & keys-coll]
(if (map? data)
(for [[k v] data]
(collapse v (if (nil? keys-coll)
(conj [] k)
(conj (into [] keys-coll) k))))
(hash-map (flatten keys-coll) data)))
(collapse {"a" {2011 [["a" 2011 "dan"] ["a" 2011 "ari"]] 2010 [["a" 2010 "jon"]]}})
Результат:
<strong>(</strong> ({("a" 2011) [["a" 2011 "dan"] ["a" 2011 "ari"]]}
{("a" 2010) [["a" 2010 "jon"]]}) <strong>)</strong>
Ожидаемый / желаемый результат (обратите внимание на последовательность, а НЕ последовательность в последовательности, как указано выше):
({("a" 2011) [["a" 2011 "dan"] ["a" 2011 "ari"]]}
{("a" 2010) [["a" 2010 "jon"]]})
Примечание : ожидаемый результат - последовательность карт; каждая карта состоит из составных ключей и вложенных векторов.