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

Haskell中实现字符转罗马数字:如何在Map中按键查找值?

在Haskell中使用Map进行查找操作

1. 导入Map模块

Haskell的Map功能位于Data.Map模块中,通常用限定导入避免命名冲突:

import qualified Data.Map as Map

2. 创建罗马数字映射Map

将字符数字与罗马数字的对应关系,通过Map.fromList从列表转换为Map实例:

digitToRoman :: Map.Map Char String
digitToRoman = Map.fromList
  [ ('1', "I")
  , ('2', "II")
  , ('3', "III")
  , ('4', "IV")
  , ('5', "V")
  , ('6', "VI")
  , ('7', "VII")
  , ('8', "VIII")
  , ('9', "IX")
  ]

3. 常用的查找方法

方法一:Map.lookup(返回Maybe类型)

该函数返回Maybe String类型——找到对应键时返回Just 罗马数字,键不存在时返回Nothing,适合需要处理无效输入的场景:

-- 查找存在的键
Map.lookup '3' digitToRoman  -- 结果:Just "III"

-- 查找不存在的键(如'0')
Map.lookup '0' digitToRoman  -- 结果:Nothing

方法二:Map.findWithDefault(指定默认值)

若能确保输入是1-9的有效字符,或想给无效输入设置默认返回值,可使用此函数。它接受三个参数:默认值、要查找的键、目标Map:

-- 查找有效键
Map.findWithDefault "" '5' digitToRoman  -- 结果:"V"

-- 查找无效键,返回指定默认值
Map.findWithDefault "无效数字" '0' digitToRoman  -- 结果:"无效数字"

完整示例函数

结合上述内容,可写出简单的转换函数:

import qualified Data.Map as Map

digitToRoman :: Map.Map Char String
digitToRoman = Map.fromList
  [ ('1', "I"), ('2', "II"), ('3', "III"), ('4', "IV"), ('5', "V")
  , ('6', "VI"), ('7', "VII"), ('8', "VIII"), ('9', "IX")
  ]

convertToRoman :: Char -> String
convertToRoman c = Map.findWithDefault "输入必须是1-9的字符数字" c digitToRoman

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:40:53