如何测试列表中是否存在元素?

时间:2018-02-22 10:08:39

标签: list qore

有没有办法测试列表中是否存在元素?

$ qore -nX 'boolean(select ("a", "b", "c"), $1 === "a")'

此解决方案仅创建一个新列表以测试其大小......

2 个答案:

答案 0 :(得分:1)

如果元素没有重复,那么你的解决方案也不错,因为只返回一个元素列表。

对于更有效的通用解决方案,您可以同时使用foldlmap运算符,这两个运算符都支持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)

实际上有一个语言功能! inlistinlist_hard