我想知道什么是Clojure-esque和标准化的搜索字符串并返回布尔值(或者某些falsy / truthy)的方式。 (例如在Java中我会使用.indexOf()并将其强制转换为布尔值。)
我想要做的是搜索地图中的所有字符串并返回1或0,具体取决于单词“clouds”是否在字符串中,然后在最后找出累积值 - 我明白我可以使用正则表达式执行此操作,但是我想知道是否有替代方法?
答案 0 :(得分:3)
实际上在Java中,最自然的解决方案是使用contains
方法。你可以在Clojure中做同样的事情:
(.contains "foobar" "bar")
;= true
通过seqable进行映射:
(mapv #(.contains "foobar" ^String %) ["foo" "bar"])
;= [true true]
使用地图作为输入,您必须决定是否需要键,值或两者;根据答案,您需要使用keys
,vals
或只是映射条目(在这种情况下reduce-kv
会产生比map
更高效的解决方案
这假设您正在搜索文字子字符串(与indexOf
一样)。使用正则表达式时,我会使用re-find
并转换为boolean
(如果没有匹配则返回nil
)。