list - 如何摆脱 Haskell 列表中列表的子列表?
问题描述
我对 Haskell 有点陌生,想知道如何执行以下操作:
L = [[1,2],[1,2,3],[1,2,3,4]]
如何摆脱所有子列表([1,2], [1,2,3]
)并仅获得结果[[1,2,3,4]]
?
解决方案
如果我理解正确的问题,解决方案可能如下所示:
import Data.List
-- Get only if element is not subsequence of any other x element
filterOutSublists x = filter (not . (isSub)) x
where
-- Check if given element is subsequence of any of x element
isSub y = foldl (\acc y' -> acc || (y `elem` (init $ subsequences y'))) False x
但是这个解决方案的 O(n) 复杂度非常差,所以对于长列表是没有用的。
推荐阅读
- python - 纯python数据库驱动
- flask - Flask WTForms - 如何跳过对不可见 div 中的字段的验证?
- javascript - 在 PHP 变量中处理内联 JS 中的单引号和双引号时遇到问题
- android - java.lang.NoSuchMethodError:没有虚拟方法 getMicrophones()
- ms-access - 如何在来自聚合查询的 Access 表中插入一组记录
- python - 如果列表元素小于阈值,则尝试删除它?
- sql - SSIS 'Column' 和 'Parameter' 无法在 unicode 和非 unicode 字符串数据类型之间转换
- java - 如何使用类似于 JSP 的 Thymeleaf 将表单数据从一个 HTML 传递到另一个?
- linux - 使用日期的 Mongo shell 查询
- sql - Oracle 空间:没有索引就无法评估 SDO_NN