我想知道搜索字符串并返回布尔值(或一些虚假/真实的东西)的最具Clojure风格和标准化的方法是什么。(例如,在Java中,我会使用.indexOf()并将其强制转换为布尔值。)
我想做的是搜索映射中的所有字符串,并返回1或0,这取决于字符串中是否有单词"clouds",然后找出最后的累积值-我知道我可以用regex来完成这项工作,但我想知道是否有其他选择?
实际上,在Java中,最自然的解决方案是使用contains
方法。你可以在Clojure:中做同样的事情
(.contains "foobar" "bar")
;= true
在序列上映射:
(mapv #(.contains "foobar" ^String %) ["foo" "bar"])
;= [true true]
有了地图作为输入,你必须决定是想要关键点、值还是两者都想要;根据答案,您可能希望使用keys
、vals
或只是映射条目(在这种情况下,reduce-kv
将产生比map
更高性能的解决方案)。
这是假设您正在搜索一个文字子字符串(与indexOf
一样)。对于正则表达式,我将使用re-find
并强制转换为boolean
(在没有匹配的情况下,它将返回nil
)。