簡體   English   中英

如何將列表列表與列表列表結合起來

[英]How to combine list of lists with list of lists

我有列表列表,需要將其與另一個列表列表結合起來。 示例輸入:A:[[1,2],[3,4],[5,6],[7,8]] B:[[1,2],[3,4],[5,6] ,[7,8]]

示例 output:[[1,2,1,2],[1,2,3,4],..,[7,8,5,6],[7,8,7,8]]

兩個列表中包含 4 個列表的 2 個列表將返回給我們一個大小為 4*4 = 16 的列表列表

我試過只是遞歸地組合列表,但我知道即使 go 通過它也行不通。

  mergeAll [[]] [[]] = [[]]
  mergeAll [[]] b = b
  mergeAll a [[]] = a
  mergeAll xs ys = mergeAll (merge xs ys) (drop 1 ys) 

  merge :: [[a]] -> [[a]] -> [[a]]
  merge [[]] [[]] = [[]]
  merge xs [[]] = xs
  merge [[]] ys = ys
  merge (x:xs) (y:ys)  = ((x++y):xs)

您可以使用列表推導:

[ xs ++ ys | xs <- listOfLists1, ys <- listOfLists2 ]

你可能會喜歡

Prelude> let doit = \as bs -> as >>= \a -> bs >>= \b -> pure (a ++ b)
Prelude> doit [[1,2],[3,4],[5,6],[7,8]] [[1,2],[3,4],[5,6],[7,8]]
[[1,2,1,2],[1,2,3,4],[1,2,5,6],[1,2,7,8],[3,4,1,2],[3,4,3,4],[3,4,5,6],[3,4,7,8],[5,6,1,2],[5,6,3,4],[5,6,5,6],[5,6,7,8],[7,8,1,2],[7,8,3,4],[7,8,5,6],[7,8,7,8]]

正如 Robin 在評論中所說,您也可以這樣做:

liftA2 (++)

我問自己一個問題,試圖理解為什么這相當於:

[xs ++ ys | xs <- xss, ys <- yss]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM