作为编码挑战的一部分,我必须实现一个地牢地图。
我已经将它Data.Map
设计为设计选择,因为不需要打印地图,有时我必须更新地图图块,例如当障碍物被破坏时。
type Dungeon = Map Pos Tile
type Pos = (Int,Int) -- cartesian coordinates
data Tile = Wall | Destroyable | ...
但是如果我也必须打印它怎么办 - 那么我将不得不使用
elaboratePrint . sort $ fromList dungeon
whereelaboratePrint
处理换行符并从图块集中制作漂亮的 unicode 符号之类的东西。
我考虑的另一个选择是嵌套列表
type Dungeon = [[Tile]]
这将有一个缺点,即很难更新这种数据结构中的单个元素。但印刷将是一个简单的单行unlines . map show
。
我考虑过的另一种结构是Array
,但由于我不习惯数组,因此我只看了一下 hackage 文档——我只发现了一个对索引进行操作的 map 函数和一个对元素起作用的函数,除非有人愿意使用可变数组更新一个乍一看,元素并不容易。并且打印数组也不清楚如何快速轻松地做到这一点。
所以现在我的问题 - 是否有更好的数据结构来表示具有易于打印和易于更新单个元素的属性的地牢地图。