Haskell - 将列表的列表转换为一个列表

9
如果我有一个列表的列表,例如[[1,2,3],[1,2,3],[1,2,3]],是否有任何方法在Haskell中将其转换为只包含1个列表的形式,例如[1,2,3,1,2,3,1,2,3]
提前感谢!
3个回答

32

Concat能够实现您想要的效果:

concat [[1,2,3],[1,2,3],[1,2,3]]

为了在将来找到这些类型的函数,您可以使用hoogle http://www.haskell.org/hoogle/

您可以搜索一个类型 - 您需要的函数是[[Int]] -> [Int],因此您可以进行这个搜索。顶部的函数是concat。

我应该提到,事实上

concat :: [[a]] -> [a]

它适用于任何嵌套列表,并且您也可以使用该类型在Hoogle中进行搜索。 Hoogle足够聪明,能够理解哪些类型与您所需的类型非常接近。


8
有几种方法可以做到这一点,例如您可以使用列表推导式:
[y | x <- [[1,2,3],[1,2,3],[1,2,3]], y <- x]

或者join函数,实际上,方式相同:
import Control.Monad (join)
join [[1,2,3],[1,2,3],[1,2,3]]

或者concat函数:
concat [[1,2,3],[1,2,3],[1,2,3]]

或msum(与concat相同):

import Control.Monad (msum)
msum [[1,2,3],[1,2,3],[1,2,3]]

或者使用mconcat(与concat相同):
import Data.Monoid (mconcat)
mconcat [[1,2,3],[1,2,3],[1,2,3]]

1
谢谢!看到你可以用不同的方式做一件事情真的非常有用! :) - user1670032

5

直接回答

> concat [[1,2,3],[1,2,3],[1,2,3]]
[1,2,3,1,2,3,1,2,3]

每当您想搜索任何函数时,请尝试使用hoogle。有时,仅通过类型信息即可获取所需函数的有关信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接