访问二维数组Elm中的元素

问题描述 投票:0回答:1

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

elm
1个回答
1
投票

是我还是只是尝试使用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',正如预期的那样

© www.soinside.com 2019 - 2024. All rights reserved.