访问二维阵列Elm中的元素

时间:2018-09-16 02:35:23

标签: elm

如何使用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?

1 个答案:

答案 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',符合预期