有没有办法测试列表中是否存在元素?
$ qore -nX 'boolean(select ("a", "b", "c"), $1 === "a")'
此解决方案仅创建一个新列表以测试其大小...
如果元素没有重复,那么你的解决方案也不错,因为只返回一个元素列表。
对于更有效的通用解决方案,您可以同时使用foldl和map运算符,这两个运算符都支持lazy functional evaluation,因此在执行复合表达式期间不会创建任何中间列表。
例如:
$ qore -nX '(foldl $1 + $2, (map 1, ("a", "b", "c", "a"), $1 === "z")).toBool()'
False
$ qore -nX '(foldl $1 + $2, (map 1, ("a", "b", "c", "a"), $1 === "a")).toBool()'
True
请注意,您可以在上面的表达式中删除.toBool()伪方法调用,以直接获取列表中元素的出现次数。然而,该解决方案的一个缺点是它扫描整个列表而不是在找到第一个匹配时立即停止。
实际上有一个语言功能! inlist和inlist_hard