list - 更新列表中的特定项目
问题描述
给定一个榆树列表,如:
twoDimensionalList =
[ [ 'U', 'U', ' ' ]
, [ ' ', ' ', ' ' ]
, [ ' ', ' ', ' ' ]
]
如何在榆树列表' '
中更新第一行?'U'
我不想使用数组,我想弄清楚如何使用列表来执行此操作。我已经完成了将列表转换为数组并使用集合。我正在尝试了解这次如何更新列表中的某个元素。
我开始考虑如何做到这一点,但就是无法做到:
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"]
推荐阅读
- python - 如何检测python-docx中的空段落
- r - 试图让脚本为每 24 行计算一个值(使用函数)
- javascript - Angular 6:日期未定义
- java - Jersey HK2 依赖注入在更新到 v2.27 后不起作用
- javascript - Redux 不重新渲染组件
- c - 如何在不复制代码的情况下创建不可转换的 C 类型?
- javascript - React 改变组件的 props 而不是每次都渲染
- r - 保存文件时如何删除部分名称?
- php - 基于名称和操作的带有复选框的组权限列表
- datatables - 带有子行的数据表(子数据表)。默认情况下如何创建/扩展所有子数据表?