我有一个像
这样的地图列表 (def listofmaps
({:directory_path "/some/path/1", :directory_size "8.49 GB"} {:directory_path "/user/dod/yieldbook/yb_sec_char", :directory_size "14.1 MB"})
包含许多值和大小的可以是gb或mb。
我也有像
这样的限制列表 (def limitlistofmaps
({:directory_path "/some/path/8", :directory_size "15.2 GB"} {:directory_path "some/path/3", :directory_size "2.1 GB"}
{:directory_path "/some/path/1", :directory_size "17.2 GB"})
有很多值..
我需要打印"限制超出"如果映射列表中的任何映射具有相同的:directory_path,如limitlistofmaps,但是:directory_size超出指定的值。问题是大小是字符串格式,必须考虑单位。
你能帮我找一个在clojure中这样做的方法吗?
答案 0 :(得分:0)
我不明白为什么人们会投票给你的问题。我认为作为一个Clojure社区,我们会好得多。我也是一个Clojure newb,我对社区没什么好说的。我希望它保持这种状态。
首先,为什么不将所有目录大小放在同一个单元中?这样就可以更容易地比较它们,比如KB。
这是一个函数的一个版本,可以将任何字符串(如“100.23 Gb”,“12 B”,“123.3443 MB”)转换为代表千字节的Double。
{ this.props.shouldShowAlert && <MyAlertDialog open={ true } /> }
其次,我建议您将目录大小限制放在 listofmaps 中的相同地图数据中,这样您就不会像现在一样在 limitslistofmaps <中拥有状态重复/ strong>即可。但是如果由于某种原因你需要这个第二张地图,这里有一段丑陋的代码,它返回一个与 listofmaps 相同的地图列表,其中包含两个添加的键/ val条目:max_size_kb和: directory_size_kb。
(defn convert-to-kb
"Converts a string 'number (B|KB|MB|GB)' to Double representing KBytes"
[str]
(let [[number-str unit] (map str/lower-case (str/split (str/trim str) #"\s+"))
number (Double/parseDouble number-str)]
(condp = unit
"b" (/ number 1000)
"kb" number
"mb" (* number 1000)
"gb" (* number 1000000))))