Comment filtrer une persistance de la carte en Clojure?
J'ai une persistance de la carte que je veux filtre. Quelque chose comme ceci:
(filter #(-> % val (= 1)) {:a 1 :b 1 :c 2})
Ci-dessus en tant que ([:a 1] [:b 1])
(un paresseux séquence de la carte d'entrées). Cependant, je veux être obtenir {:a 1 :b 1}
.
Comment puis-je filtrer une carte, donc il reste une carte sans avoir à reconstruire à partir d'une séquence d'entrées de mappage?
Vous devez vous connecter pour publier un commentaire.
Et un autre:
Bien sûr, ce ne reconstruire la carte à partir d'une séquence de la carte des entrées, mais il n'y a pas moyen de contourner cela. Si vous allez pour filtrer les entrées en valeur, vous allez avoir à passer par un par un pour voir les valeurs qui correspondent à vos prédicat et qui ne le sont pas.
Mis à jour (voir les commentaires ci-dessous):
Avec la nouvelle
keep
fonction, la source de laquelle vous pouvez voir ici (devrait fonctionner très bien en Clojure 1.1 si vous voulez backport), cela semble être une belle façon d'aller à ce sujet si vous n'utilisez pasnil
comme l'un des principaux:Aussi, si vous ne vous en fait voir un ralentissement lié à la reconstruction de votre carte, vous pouvez utiliser un transitoire de la carte lors de l'étape de reconstruction:
Par votre commentaire Michał Marczyk:
Je ne vois pas que vous allez gagner beaucoup de choses avec ce vs Michał de la version.
Est nécessaire de parcourir toutes les entrées, mais peuvent tirer parti de Clojures persistante des cartes:
Je me suis essayé sur macro basé sur kotarak de la version. Sa ma première macro de faire quelque chose d'utile, de sorte s'il vous plaît garder avec moi et commentaires bienvenus.
Exemple