You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell中如何将[(Char, Int)]类型元组列表转换为字符串?

嘿,这个问题我之前在写Haskell小工具的时候也碰到过,确实因为列表元素类型必须统一,没法直接把Char和Int混在一起拼~给你两种思路,看哪种更适配你的需求:

最简洁通用的实现(支持任意位数的Int)

其实完全不用自己写Int转Char的函数,Haskell标准库的show函数可以直接把Int转换成对应的字符串(比如show 123会得到"123"),结合concatMap就能一步搞定:

tupToStr :: [(Char, Int)] -> String
tupToStr = concatMap (\(char, num) -> char : show num)

举个例子,调用tupToStr [('j',9),('x',1),('f',3)]会返回"j9x1f3",就算你传多位数的Int比如('a', 123),也会正确生成"a123",通用性拉满。

如果一定要自己实现Int转单个数字字符的函数

如果你只需要处理0-9的单个数字Int,那可以自己写一个把数字映射到对应字符的函数,注意别直接用toEnum转(那会得到ASCII码对应的字符,比如toEnum 9是制表符,不是'9'),正确的实现可以这样:

方法1:用枚举值计算

intToDigitChar :: Int -> Char
intToDigitChar n = toEnum (fromEnum '0' + n)

原理是'0'的ASCII码加上数字n,正好对应该数字字符的ASCII码,再转成Char就行。

方法2:模式匹配(更直观)

intToDigitChar :: Int -> Char
intToDigitChar 0 = '0'
intToDigitChar 1 = '1'
intToDigitChar 2 = '2'
intToDigitChar 3 = '3'
intToDigitChar 4 = '4'
intToDigitChar 5 = '5'
intToDigitChar 6 = '6'
intToDigitChar 7 = '7'
intToDigitChar 8 = '8'
intToDigitChar 9 = '9'
intToDigitChar _ = error "只支持0-9的单个数字Int"

然后基于这个函数实现tupToStr:

tupToStr :: [(Char, Int)] -> String
tupToStr = concatMap (\(char, num) -> [char, intToDigitChar num])

这个版本只适用于Int是单个数字的场景,多位数的话会报错,根据你的需求选就行~

内容的提问来源于stack exchange,提问作者Data

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:53:56