我需要将多个列表与常用元素组合在一起。我应该在列表中做。
例如:
INPUT: [[1,2,3],[5,6],[8,3,11],[4,9,1]]
MY输出: [[1,2,3,8,3,11,1,2,3,4,9,1],[]]
需要输出: [[1,2,3,8,11,9],[5,6]]
另一个例子:
INPUT: [[4],[0],[7,10],[6],[6]]
MY输出: [[6,6],[]]
输出: [[4],[0],[7,10],[6]]
我的代码:
mergeAllLists :: [[Integer]] -> [[Integer]]
mergeAllLists (x:[]) = [x]
mergeAllLists (x:[]:y) = [x]
mergeAllLists (x:y:[]:_) = mergeOneToAll_ x [y]
mergeAllLists (x:xs) = mergeAllLists (mergeOneToAll x xs)
mergeOneToAll :: [Integer] -> [[Integer]] -> [[Integer]]
mergeOneToAll _ [] = [[]]
mergeOneToAll list (y:list_of_list) = (mergeLists list y) : ( mergeOneToAll list list_of_list )
答案 0 :(得分:2)
mergeAllLists :: [[Integer]] -> [[Integer]]
mergeAllLists = foldl mergeOneToAll []
mergeOneToAll :: [[Integer]] -> [Integer] -> [[Integer]]
mergeOneToAll [] xs = [xs]
mergeOneToAll (as:acc) xs =
if null $ intersect xs as then
as : mergeOneToAll acc xs
else
(as ++ xs) : acc
虽然效率不高(不是尾递归)。让我知道它是否需要更有效率,我会尝试改进它。