有没有办法测试列表中是否存在元素?
$ qore -nX 'boolean(select ("a", "b", "c"), $1 === "a")'
此解决方案仅创建一个新列表以测试其大小......
答案 0 :(得分:1)
如果元素没有重复,那么你的解决方案也不错,因为只返回一个元素列表。
对于更有效的通用解决方案,您可以同时使用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()伪方法调用,以直接获取列表中元素的出现次数。但是,这个解决方案的一个缺点是,它会扫描整个列表,而不是在找到第一个匹配项后立即停止。
答案 1 :(得分:0)
实际上有一个语言功能! inlist和inlist_hard