鉴于榆树列表如下:
twoDimensionalList =
[ [ 'U', 'U', ' ' ]
, [ ' ', ' ', ' ' ]
, [ ' ', ' ', ' ' ]
]
如何在Elm列表中使用' '
更新第一行中的'U'
?我不想使用我想知道如何使用List执行此操作的数组。我已经完成了将转换列表转换为数组并使用了set。我正在尝试学习如何更新列表中的某个元素。
我开始考虑如何做到这一点,但却无法实现:
row1 =
take 0 twoDimensionalList
row1Updated =
indexedMap \i row1 -> if i == 2 then --somehow update this item in the map with 'U'
对于这个特定的场景,我只是在列表上进行模式匹配,将我想保留的部分绑定到变量,然后用我的替换值重新构建它:
case twoDimensionalList of
[ a, b, _ ] :: tail ->
[ a, b, 'U' ] :: tail
_ ->
twoDimensionalList
基本上,::
运算符(称为“cons”)将匹配或绑定其左侧的第一个元素(称为“head”),以及右侧的列表的其余部分(“tail”)。所以"a" :: ["b", "c"]
将匹配列表["a", "b", "c"]
。
模式中的列表文字语法([...]
)将匹配该大小的列表。所以[a, b, _] :: tail
将匹配一个列表,第一个(“head”)元素本身是一个三元素列表,其中前两个元素绑定到变量a
和b
,第三个元素,我们要替换它,是忽略。然后外部列表的其余部分绑定到tail
。
然后使用几乎相同的语法重建列表。我确定你熟悉的列表文字语法,cons运算符(::
)与其模式形式的工作方式类似,将左边的元素添加到右边的列表中,例如"a" :: ["b", "c"]
将返回列表["a", "b", "c"]