Clojure: извлечение карт с конкретными значениями из Lazy Sequence

У меня есть Clojure Lazy Sequence:

{
    {:keyOne 123, :keyTwo "TestVal"}
    {:keyOne 456, :keyTwo "Value2"}
    {:keyOne 789, :keyTwo "TestVal"}
}

Я хочу получить карты, которые имеют определенное значение для данного ключа, например, я хочу, чтобы все карты имели значение "TestVal" как :keyTwo значение, поэтому я ожидаю, что первый и третий элемент в моем результате.

Я предполагаю, что смогу решить эту проблему, используя filter, но я просмотрел все примеры, которые смог найти, и они никогда не использовали такую ​​вложенную структуру.

1 ответ

Решение
{{:keyOne 123, :keyTwo "TestVal"}
 {:keyOne 456, :keyTwo "Value2"}
 {:keyOne 789, :keyTwo "TestVal"}}

В clojure это выражение не имеет смысла, это не ленивая последовательность карт. Чтобы ответить на ваш вопрос адекватно, я думаю, что входные данные, как показано ниже:

(def input '({:keyOne 123, :keyTwo "TestVal"}
             {:keyOne 456, :keyTwo "Value2"}
             {:keyOne 789, :keyTwo "TestVal"}))

Мы можем сделать выражение для вашей цели следующим образом:

(filter (fn [m] (= "TestVal" (:keyTwo m))) input)

Неважно, будет ли входная последовательность ленивой или не ленивой (нетерпеливой).

Другие вопросы по тегам