清泛IT社区

标题: App Inventor 2 列表积木完全指南:从入门到精通,一篇搞定数据存储 [打印本页]

作者: App Inventor 2     时间: 2 小时前
标题: App Inventor 2 列表积木完全指南:从入门到精通,一篇搞定数据存储
做 App 的时候,你一定会遇到这样一个问题:数据太多了,变量根本管不过来。 比如一个购物清单有 20 样商品,难道要建 20 个变量?一个用户通讯录有 100 条记录,难道要写 100 个变量?当然不用。列表(Lists) 就是帮你批量管理同类数据的利器。今天这篇文章,我会把 App Inventor 2 中所有列表积木的用法掰开揉碎讲清楚,从基础创建到高级函数式操作,看完就能上手用。

一、列表是什么?为什么如此重要?

列表本质上是一个有序的数据集合。你可以把它想象成一排带编号的抽屉,每个抽屉里放一个数据项,编号从 1 开始(注意,不是从 0 开始)。

和普通变量只能存一个值不同,一个列表可以存放任意数量的数据项,而且支持混合类型——你可以在同一个列表里放文字、数字、布尔值,甚至嵌套另一个列表。这种灵活性让列表成为 App Inventor 2 中最核心的数据结构。

二、基础操作:创建与添加

1. 创建空列表

使用 创建空列表 积木,初始化一个没有任何元素的列表。通常搭配变量使用:

  1. 设置 global myList = [ 创建空列表 ]
复制代码


这是最常见的初始化方式,先创建空列表,再在程序运行过程中动态添加数据。

2. 创建列表

使用 创建列表 积木可以直接给定初始值。点击蓝色齿轮可以新增更多列表项槽位,这是一个块扩展(Mutator)特性。

  1. 设置 global colors = [ 创建列表: "红" "绿" "蓝" ]
复制代码


你甚至可以创建混合类型的列表(类似 Python 的元组 Tuple),比如:

  1. 设置 global userInfo = [ 创建列表: "张三" 25 true ]
复制代码


这里依次存放了字符串(姓名)、数字(年龄)、布尔值(是否会员),取出来时保持原类型不变。

3. 追加列表项

使用 追加列表项 积木,将新元素添加到列表末尾。同样是块扩展积木,点击齿轮可以一次添加多项。

  1. 追加列表项 到 global colors: "黄"
复制代码


三、查询操作:查找、判断与选取

1. 检查列表是否包含某对象

使用 列表中是否包含 积木,返回布尔值(true/false)。

注意:如果列表包含子列表,子列表的成员本身并不是外层列表的成员。例如列表 [1, 2, [3, 4]] 的成员是 1、2 和 [3, 4],而 3 和 4 不是该列表的直接成员。

2. 求列表长度

求列表长度 积木返回列表中的项目数,一目了然。

3. 列表是否为空

列表是否为空? 返回 true/false。这在遍历前做安全检查时非常有用,避免对空列表操作导致报错。

4. 随机选取列表项

随机选取列表项 从列表中随机返回一个元素。如果列表为空会抛出异常,所以务必先判空。

5. 求对象在列表中的位置

求对象在列表中的位置 返回元素的索引值(从 1 开始),如果不存在则返回 0。

6. 选择列表中索引值对应的列表项

这是最常用的读取操作,通过索引取出对应位置的元素:

  1. 选择列表项 列表: global colors, 索引: 2  返回 "绿"
复制代码


四、修改操作:插入、替换与删除

1. 在列表某个位置插入项

在列表的位置插入 将新元素插入到指定索引处,原有元素自动后移。

2. 替换列表中索引值对应的项

替换列表中索引值对应的列表项 用新值替换指定位置的旧值。

3. 删除列表中某项

删除列表中某项 根据索引移除对应元素,后续元素自动前移。

五、进阶操作:合并、复制与反转

1. 追加整个列表

将一个列表中所有项追加到另一个列表中 把第二个列表的全部元素添加到第一个列表末尾。注意这不是嵌套,而是合并。

2. 复制列表

复制列表 生成列表的深拷贝(包括所有子列表)。这在需要保留原始列表、操作副本的场景下非常关键。

避坑提示:直接用赋值 设置 listB = listA 只是引用同一个列表,修改其中一个另一个也会变!需要真正复制时务必使用 复制列表 积木。

3. 列表转置

列表转置 返回一个新列表(不改变原列表),元素顺序完全颠倒。比如 [1, 2, 3] 转置后返回 [3, 2, 1]。

六、CSV 与列表互转

App Inventor 2 提供了一组 CSV 相关积木,方便列表与文本之间的格式转换:



这在处理导入导出的表格数据时特别有用。

七、函数式操作:Map、Filter、Reduce、Sort

这是列表积木中最强大的部分,灵感来源于函数式编程。

1. 创建映射列表(Map)

对列表中每个元素应用一个表达式,生成全新的列表。使用变量名 item 引用当前元素:

  1. Map: [ item x 2 ]  ->  [1,2,3] 变为 [2,4,6]
复制代码


2. 创建过滤列表(Filter)

根据布尔表达式筛选满足条件的元素:

  1. Filter: [ item > 2 ]  ->  [1,2,3,4] 变为 [3,4]
复制代码


3. 缩减列表(Reduce)

将列表逐步合并为单个值。首次运算用初始值和第一个元素,之后用结果和下一个元素,直到结束:

  1. Reduce: [ result + item ], 初始值: 0  ->  [1,2,3] 结果为 6
复制代码


4. 排序

App Inventor 2 提供了三种排序方式:



此外还有 列表中的最小值列表中的最大值,快速获取极值。

5. 截取列表(Slice)

截取列表 通过起始索引和结束索引返回子列表(包含起始,不包含结束),和 Python 的切片概念类似。

八、键值对查找

在键值对中查找 是一个非常实用的积木,用于在「对的列表」(Pair List)中查找信息。

键值对列表格式:[[key1, value1], [key2, value2], ...]

  1. 在键值对中查找 关键字: "cat", 键值对列表: [["a","apple"],["cat","100"]], 未找到: "not found"  ->  返回 "100"
复制代码


这种模式在解析天气预报 JSON 等实际开发场景中广泛使用。

九、实战案例

案例 1:列表遍历

遍历使用控制积木中的循环,有两种方式:



案例 2:列表去重

原理:新建空列表,逐一取出原列表元素,判断是否已存在,不存在才添加。

  1. 原列表: [1, 2, 2, 3, 4, 4]  ->  去重后: [1, 2, 3, 4]
复制代码


案例 3:清理列表

直接用空列表覆盖即可,简单粗暴:

  1. 设置 global myList = [ 创建空列表 ]
复制代码


案例 4:二维列表操作

二维列表就是「列表的列表」,例如 [["abc","123"],["xyz","456"]]。操作方式和一维列表几乎一样,区别在于取出的元素本身又是一个列表。这在解析 JSON 数据时极为常见。

总结

App Inventor 2 的列表积木覆盖了日常开发 95% 以上的数据操作需求。掌握以下要点,你就能游刃有余:



建议先用简单的待办清单 App 练手,把列表的增删改查全部跑通,再尝试 Map/Filter/Reduce 这些高级操作。

相关资料

列表积木完整文档
App Inventor 2 中文网
清泛IT社区 - 技术交流社区
列表排序进阶教程

觉得有用?点赞收藏,关注「App Inventor 2 中文网」,每周分享积木编程实战技巧。




欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/) Powered by Discuz! X3.3