做 App 的时候,你一定会遇到这样一个问题:数据太多了,变量根本管不过来。 比如一个购物清单有 20 样商品,难道要建 20 个变量?一个用户通讯录有 100 条记录,难道要写 100 个变量?当然不用。列表(Lists) 就是帮你批量管理同类数据的利器。今天这篇文章,我会把 App Inventor 2 中所有列表积木的用法掰开揉碎讲清楚,从基础创建到高级函数式操作,看完就能上手用。
列表本质上是一个有序的数据集合。你可以把它想象成一排带编号的抽屉,每个抽屉里放一个数据项,编号从 1 开始(注意,不是从 0 开始)。
和普通变量只能存一个值不同,一个列表可以存放任意数量的数据项,而且支持混合类型——你可以在同一个列表里放文字、数字、布尔值,甚至嵌套另一个列表。这种灵活性让列表成为 App Inventor 2 中最核心的数据结构。
使用 创建空列表 积木,初始化一个没有任何元素的列表。通常搭配变量使用:
设置 global myList = [ 创建空列表 ]
```txt这是最常见的初始化方式,先创建空列表,再在程序运行过程中动态添加数据。
使用 创建列表 积木可以直接给定初始值。点击蓝色齿轮可以新增更多列表项槽位,这是一个块扩展(Mutator)特性。
设置 global colors = [ 创建列表: "红" "绿" "蓝" ]
```txt你甚至可以创建混合类型的列表(类似 Python 的元组 Tuple),比如:
设置 global userInfo = [ 创建列表: "张三" 25 true ]
```txt这里依次存放了字符串(姓名)、数字(年龄)、布尔值(是否会员),取出来时保持原类型不变。
使用 追加列表项 积木,将新元素添加到列表末尾。同样是块扩展积木,点击齿轮可以一次添加多项。
追加列表项 到 global colors: "黄"
```txt使用 列表中是否包含 积木,返回布尔值(true/false)。
⚠️ 注意:如果列表包含子列表,子列表的成员本身并不是外层列表的成员。例如列表
[1, 2, [3, 4]] 的成员是 1、2 和[3,4],而 3 和 4 不是该列表的直接成员。
求列表长度 积木返回列表中的项目数,一目了然。
列表是否为空? 返回 true/false。这在遍历前做安全检查时非常有用,避免对空列表操作导致报错。
随机选取列表项 从列表中随机返回一个元素。如果列表为空会抛出异常,所以务必先判空。
求对象在列表中的位置 返回元素的索引值(从 1 开始),如果不存在则返回 0。
这是最常用的读取操作,通过索引取出对应位置的元素:
选择列表项 列表: global colors, 索引: 2 → 返回 "绿"
```txt在列表的位置插入 将新元素插入到指定索引处,原有元素自动后移。
替换列表中索引值对应的列表项 用新值替换指定位置的旧值。
删除列表中某项 根据索引移除对应元素,后续元素自动前移。
将一个列表中所有项追加到另一个列表中 把第二个列表的全部元素添加到第一个列表末尾。注意这不是嵌套,而是合并。
复制列表 生成列表的深拷贝(包括所有子列表)。这在需要保留原始列表、操作副本的场景下非常关键。
💡 避坑提示:直接用赋值
设置 listB = listA只是引用同一个列表,修改其中一个另一个也会变!需要真正复制时务必使用复制列表积木。
列表转置 返回一个新列表(不改变原列表),元素顺序完全颠倒。比如 [1, 2, 3] 转置后返回 [3, 2, 1]。
App Inventor 2 提供了一组 CSV 相关积木,方便列表与文本之间的格式转换:
积木 | 功能 | 示例 |
|---|---|---|
列表转换为CSV行 | 一维列表 → CSV 文本 |
|
CSV行转换为列表 | CSV 文本 → 一维列表 |
|
列表转换为CSV表 | 二维列表 → CSV 多行文本 | 每个子列表变成一行 |
CSV表转换为列表 | CSV 多行文本 → 二维列表 | 每行变成一个子列表 |
这在处理导入导出的表格数据时特别有用。
这是列表积木中最强大的部分,灵感来源于函数式编程。
对列表中每个元素应用一个表达式,生成全新的列表。使用变量名 item 引用当前元素:
Map: [ item × 2 ] → [1,2,3] 变为 [2,4,6]
```txt根据布尔表达式筛选满足条件的元素:
Filter: [ item > 2 ] → [1,2,3,4] 变为 [3,4]
```txt将列表逐步合并为单个值。首次运算用初始值和第一个元素,之后用结果和下一个元素,直到结束:
Reduce: [ result + item ], 初始值: 0 → [1,2,3] 结果为 6
```txtApp Inventor 2 提供了三种排序方式:
此外还有 列表中的最小值 和 列表中的最大值,快速获取极值。
截取列表 通过起始索引和结束索引返回子列表(包含起始,不包含结束),和 Python 的切片概念类似。
在键值对中查找 是一个非常实用的积木,用于在「对的列表」(Pair List)中查找信息。
键值对列表格式:[[key1, value1], [key2, value2], ...]
在键值对中查找 关键字: "cat", 键值对列表: [["a","apple"],["cat","100"]], 未找到: "not found"
→ 返回 "100"
```txt这种模式在解析天气预报 JSON 等实际开发场景中广泛使用。
遍历使用控制积木中的循环,有两种方式:
从列表循环(foreach)—— 不需要索引时用这个,最简洁从范围循环(for range)—— 需要索引时用这个原理:新建空列表,逐一取出原列表元素,判断是否已存在,不存在才添加。
原列表: [1, 2, 2, 3, 4, 4]
→ 去重后: [1, 2, 3, 4]
```txt直接用空列表覆盖即可,简单粗暴:
设置 global myList = [ 创建空列表 ]
```txt二维列表就是「列表的列表」,例如 [["abc","123"],["xyz","456"]]。操作方式和一维列表几乎一样,区别在于取出的元素本身又是一个列表。这在解析 JSON 数据时极为常见。
App Inventor 2 的列表积木覆盖了日常开发 95% 以上的数据操作需求。掌握以下要点,你就能游刃有余:
建议先用简单的待办清单 App 练手,把列表的增删改查全部跑通,再尝试 Map/Filter/Reduce 这些高级操作。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。