簡體   English   中英

Haskell - 映射列表列表

[英]Haskell - mapping over a list of lists

我一直試圖從一系列的整數列表中獲取一個列表列表,例如:

[[0,0,1,4,7,10,11,12,16],[1,4,4,6,7,7,12,12,19],[0,0,0,2,4,7,11,12,13]]

應該產生[[0,1,0],[0,4,0],[1,4,0] ..等等]

我可以使用[0,1,0]

map head saidList

所以我一直在嘗試在列表的尾部使用它,但我無法弄明白。

任何幫助都將非常受歡迎,因為這是一個巨大項目的最后和非常小的一部分。

查看Data.List

ghci> :t Data.List.transpose
Data.List.transpose :: [[a]] -> [[a]]
ghci> Data.List.transpose [[0,0,1,4,7,10,11,12,16],[1,4,4,6,7,7,12,12,19],[0,0,0,2,4,7,11,12,13]]
[[0,1,0],[0,4,0],[1,4,0],[4,6,2],[7,7,4],[10,7,7],[11,12,11],[12,12,12],[16,19,13]]

你的方法

map head l

只生成第一個列表,並且只有在原始列表列表中的所有列表都不為空時才有效。

您需要一種方法來丟棄空列表(您不想占用這些列表),然后將一種方法應用於非空列表的尾部。 這是一個可能的解決方案:

filterNonNull x = filter (\y -> not (null y)) x

f x = if null h then [] else h : t
    where
      n = filterNonNull x
      h = (map head n)
      t = f (map tail n)

我在ghci上測試過它:

f [[1, 2, 3], [4, 5, 6],[7,8]]

[[1,4,7],[2,5,8],[3,6]]

暫無
暫無

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

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