如何使用Array.get获取此数组中的某些元素?
首先我有一个2D列表:
node = [['X',' ',' '],['O','O',' '],['X',' ',' ']]
-- so node is a [['X','X',' '],[' ',' ',' '],[' ',' ',' ']] : List (List Char)
我将它转换为2D数组,所以我得到:
Array.fromList [Array.fromList ['X','X',' '],Array.fromList [' ',' ',' '],Array.fromList [' ',' ',' ']] : Array.Array (Array.Array Char)
虽然旁注:为什么repl给我这个而不是仅仅报告为[['X','X',''],['','',''],['','',' ']]:Array.Array(Array.Array Char)?只是想知道,以为这很奇怪。
所以现在节点是一个2D数组而不是一个列表。
现在如果我想在2D数组中的位置[0][1]
访问值,那么第一行中的第二个'X'
(这样的索引为1)2D数组,我将如何使用get
?
一旦我弄清楚如何做到这一点,我将需要弄清楚如何更新该位置,例如将X更改为O或将空位置更改为X或O
是我还是只是尝试使用2D列表或榆树中的2D阵列只是一个巨大的PITA?
是我还是只是尝试使用2D列表或榆树中的2D阵列只是一个巨大的PITA?
链接列表是函数式语言中更常见的结构,并且大多数关于算法的推理都是基于它们的,这就是为什么使用经典数组有时候可能会很乏味(选项是检查应用程序的结构并使列表适合这个)结构体)。
关于这个问题,想象一下你有这样一个功能:
arrayNode : Array.Array (Array.Array Char)
arrayNode = Array.fromList [Array.fromList ['X','X',' '],Array.fromList [' ',' ',' '],Array.fromList [' ',' ',' ']]
要在此数组中获取0
行,可以使用Array.get函数:
Array.get 0 arrayNode
据我所知,困难是返回Maybe (Array.Array Char)
类型,所以我们不能再一次使用Array.get
。
我们可以使用case
表达式并检查结果是Just (Array.Array Char)
还是Nothing
,但实际上有Maybe.andThen函数,它可以简化代码:
Array.get 0 arrayNode |> Maybe.andThen (Array.get 1)
结果是Just 'X'
,正如预期的那样