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

How to test whether an element exists in list?

有没有一种方法可以测试一个元素是否存在于列表中?

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

此解决方案创建一个新列表只是为了测试其大小...

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

为了更有效的通用解决方案,您可以使用 foldl and map operators together, both of which support lazy functional evaluation,因此在执行复合表达式期间不会创建中间列表。

例如:

$ qore -nX '(foldl  + , (map 1, ("a", "b", "c", "a"),  === "z")).toBool()'
False
$ qore -nX '(foldl  + , (map 1, ("a", "b", "c", "a"),  === "a")).toBool()'
True

请注意,您可以去掉上述表达式中的 .toBool() pseudo-method 调用以直接获取列表中元素的出现次数。但是,此解决方案的一个缺点是它会扫描整个列表,而不是在找到第一个匹配项后立即停止。

居然有语言功能! inlist and inlist_hard