访问二维数组 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?

我还是只是想在榆树中使用 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',正如预期的那样

最新更新