我正在尝试将SQL查询的最大值和最小值提取到Clojure中,以便我可以对它们进行数学分析,但我不确定为什么会出现错误。我已经在代码中使用了max和min函数来确定这些结果,但我一直收到两个错误,似乎与我使用的:counter关键字有关。
从SQL查询返回的数据在地图中看起来像这样:
当我使用这段代码时:
我希望将minvalue设置为50,将maxvalue设置为1000,但是我遇到了如下错误:
如果我从代码中删除map函数并再次运行它,我会得到以下错误:
从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
如果我从代码中删除map函数并再次运行它,我会得到以下错误:
java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to java.lang.Number
我非常需要帮助,因为我在这方面完全卡住了(很明显我是Clojure的新手)!谢谢。
(reduce min(:counter(第一个地图))(map:counter(其余地图)))
),这比apply更有效率。 - noisesmith