如何测试一个元素是否存在于列表中?
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
有没有一种方法可以测试一个元素是否存在于列表中?
$ 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