Haskell - 如何将 [1,2,3] 转换为“123”
Haskell - how to convert [1,2,3] to "123"
如何将整数列表 [1,2,3] 转换为字符串“123”
抱歉问了一些显而易见的问题,但我似乎无法在其他地方找到答案。
最好的方法是使用 show
和 concatMap
,这只是 concat
和 map
的组合:
> concatMap show [1, 2, 3]
"123"
这也适用于多于一位的数字:
> concatMap show [10, 20, 30]
"102030"
自type String = [Char]
以来,我们可以将其视为列表处理问题 第一部分是将每个数字转换为其 String
表示,只需使用 show
即可完成。由于我们要将其应用于数字列表,因此 map
是首选工具。最后,我们想将所有的字符串表示形式(Char
表示形式的列表)连接成一个字符串(Char
的列表),因此 concat
是合适的:
> concat $ map show [1, 2, 3]
"123"
每当你看到 concat $ map f some_list
,你总是可以使用预定义的工具 concatMap
,因为这正是它的定义:
> concatMap show [1, 2, 3]
"123"
正如评论中所指出的,您可以使用 Data.Foldable
模块中的 foldMap
,该模块概括了整个 "map then combine" 功能。 Foldable
类型类基本上只是意味着你可以在它上面使用 fold
s,它也使用 Monoid
,这基本上只是意味着你有一种方法来组合两个元素,例如串联列表或添加数字。或者,您也可以使用列表形成 Monad
的事实,并将 >>=
运算符用作
> [1, 2, 3] >>= show
"123"
最后,所有这些操作几乎都归结为对每个元素应用一个函数,然后使用其他函数将这些结果组合在一起。这是一个非常通用的模式,可以在很多情况下应用,因此为什么要对它进行概括。
或者,您可以使用
map (chr . (ord '0' +)) [1,2,3,4]
如果您的所有整数都是个位数(您需要从 Data.Char
导入 chr
和 ord
)。
这是可行的,因为 String
只是 Haskell 中 [Char]
的类型同义词,所以我们所做的只是将列表中的每个 Int
映射到合适的Char
.
如何将整数列表 [1,2,3] 转换为字符串“123”
抱歉问了一些显而易见的问题,但我似乎无法在其他地方找到答案。
最好的方法是使用 show
和 concatMap
,这只是 concat
和 map
的组合:
> concatMap show [1, 2, 3]
"123"
这也适用于多于一位的数字:
> concatMap show [10, 20, 30]
"102030"
自type String = [Char]
以来,我们可以将其视为列表处理问题 第一部分是将每个数字转换为其 String
表示,只需使用 show
即可完成。由于我们要将其应用于数字列表,因此 map
是首选工具。最后,我们想将所有的字符串表示形式(Char
表示形式的列表)连接成一个字符串(Char
的列表),因此 concat
是合适的:
> concat $ map show [1, 2, 3]
"123"
每当你看到 concat $ map f some_list
,你总是可以使用预定义的工具 concatMap
,因为这正是它的定义:
> concatMap show [1, 2, 3]
"123"
正如评论中所指出的,您可以使用 Data.Foldable
模块中的 foldMap
,该模块概括了整个 "map then combine" 功能。 Foldable
类型类基本上只是意味着你可以在它上面使用 fold
s,它也使用 Monoid
,这基本上只是意味着你有一种方法来组合两个元素,例如串联列表或添加数字。或者,您也可以使用列表形成 Monad
的事实,并将 >>=
运算符用作
> [1, 2, 3] >>= show
"123"
最后,所有这些操作几乎都归结为对每个元素应用一个函数,然后使用其他函数将这些结果组合在一起。这是一个非常通用的模式,可以在很多情况下应用,因此为什么要对它进行概括。
或者,您可以使用
map (chr . (ord '0' +)) [1,2,3,4]
如果您的所有整数都是个位数(您需要从 Data.Char
导入 chr
和 ord
)。
这是可行的,因为 String
只是 Haskell 中 [Char]
的类型同义词,所以我们所做的只是将列表中的每个 Int
映射到合适的Char
.