如何使用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]
处的值,那么在第一行(即索引1)2D数组中访问第二个'X'
时,该怎么办?与get
一起使用?
一旦我弄清楚如何做到这一点,那么我将需要弄清楚如何更新该位置,例如将X更改为O或将空位置更改为X或O
是我还是只是尝试使用榆木中的2D列表或2D阵列只是一个巨大的PITA?
答案 0 :(得分:1)
是我还是只是尝试使用榆木中的2D列表或2D阵列只是一个巨大的PITA?
链接列表是功能语言中较为常见的结构,有关算法的大多数推理都基于链表,因此有时使用经典数组有时会很乏味(该选项是检查应用程序的结构并创建列表)适合这种结构)。
关于这个问题,假设您具有这样的功能:
arrayNode : Array.Array (Array.Array Char)
arrayNode = Array.fromList [Array.fromList ['X','X',' '],Array.fromList [' ',' ',' '],Array.fromList [' ',' ',' ']]
要在此数组Array.get函数中获得0
行,可以使用:
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'
,符合预期