Я пытаюсь извлечь максимальные и минимальные результаты из SQL-запроса в Clojure, чтобы я мог выполнять математический анализ, но я не уверен, почему я получаю сообщение об ошибке.Получение значений max и min в Clojure
Я использовал функции max и min в коде, чтобы попытаться определить эти результаты, хотя я все время возвращаю две ошибки, которые, как представляется, относятся к тому, как я использую ключевое слово : counter.
Данные, возвращаемые в карте из запроса SQL выглядит следующим образом:
{:date1 "20131007", :data "object1", :counter 1000}
{:date1 "20131007", :data "object2", :counter 50}
{:date1 "20131007", :data "object3", :counter 230}
Когда я использую этот код:
minvalue(min(map(keyword :counter)data2))
maxvalue(max(map(keyword :counter)data2))
valrange(- maxvalue minvalue)
valpc(* (/ valrange 100) 10)
x(- maxvalue valpc)
Я бы, очевидно, хотят MinValue быть установлен как 50 и maxvalue будет установлен в 1000, хотя я получаю эту ошибку:
java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to java.lang.Number
Если удалить функцию карты из кода и запустить его снова, я получаю эту ошибку:
java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to java.lang.Number
любая помощь по этому вопросу, как я полностью застрял (и, вероятно, довольно ovbious, что я м новичок в Clojure)! Благодаря
обратите внимание на производительность: если у вас есть большее количество карт для обработки, используйте сокращение (что-то вроде '(уменьшить min (: counter (first maps)) (map: counter (rest maps)))) будет более эффективным, чем применимо. – noisesmith