首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >把列表里每个数都乘以 2,一块积木就够:App Inventor 的「映射列表」

把列表里每个数都乘以 2,一块积木就够:App Inventor 的「映射列表」

原创
作者头像
用户10956490
发布于 2026-10-18 11:41:49
发布于 2026-10-18 11:41:49
160
举报

摘要:有用户问:想把一个列表里的所有数值都乘以 2,再得到这个新列表,找不到「遍历列表、逐个运算、返回列表」的方法。其实列表抽屉里就有现成的一块:「创建新列表 逐一映射」。不用写循环,也不用建临时变量。

用户的问题

有没有快速直接的办法,把一个列表中的所有数值乘以 2,然后返回这个列表?我没找到遍历列表所有元素进行运算并且返回列表的方法。

很多人第一反应是用「对于任意 列表项 于列表」循环,再建一个空列表往里追加。这样能做,但要四五块积木,还要多一个全局或局部变量。App Inventor 其实专门为这件事准备了一块积木。

答案:「创建新列表 逐一映射」

打开内置块的「列表」抽屉,往下翻,能找到这一块:

创建新列表 逐一映射 列表项 (列表) 到 (表达式)

它的意思是:把列表里的每一项依次放进「列表项」,算出「到」后面的表达式,再把所有结果按原来的顺序装进一个新列表返回。

img
img

▲ 逐一映射:每一项算一次,按原顺序装进新列表(示意图)

乘以 2 就这么写:「列表」插槽接要处理的列表,「到」插槽放一个乘法块,左边是「获取 列表项」,右边是 2。

img
img

▲ 用「逐一映射」把每项乘以 2

点一下按钮,标签显示 (6 10 16 24 40)。

三个要点

1. 原列表不变,得到的是一个新列表。 映射完,「数字列表」里还是 3、5、8、12、20。想用新结果替换原来的,就把映射的结果再赋值回去:「设置 global 数字列表 为 创建新列表 逐一映射…」。

2. 「到」后面可以是任意表达式。 不只是乘以 2:加 10、四舍五入、求平方、摄氏度换算成华氏度(列表项 × 1.8 + 32),甚至把每个数拼成文本(「合并字符串 列表项 "元"」),都是改这一处就行。

3. 列表里混进了非数字会报错。 比如从文本框或网络读进来的数据里有空字符串,乘法会出错。可以先用同一抽屉里的「创建新的过滤列表」把非数字筛掉,再映射:过滤的测试条件放一个「是否为数字?」块。

同一组里的另外两块

「逐一映射」旁边还有两块,用法几乎一样,记住了一个就会另外两个:

img
img

▲ 映射、过滤、缩减三块积木(示意图)

积木

作用

例子

创建新列表 逐一映射

每一项算出一个新值,得到同样长度的新列表

每个数乘以 2

创建新的过滤列表

只保留满足条件的项

只要大于 10 的数

缩减列表

把所有项合成一个值

求总和、求最大值

三块可以接在一起用:先过滤掉不及格的分数,再把每个分数加 5 分,最后缩减求总分,全程不用写一个循环。

老办法:自己写循环

在有「逐一映射」之前,大家都是自己写循环:先把结果列表清空,遍历原列表,把每项乘以 2 追加进去。

img
img

▲ 老办法:自己写循环追加

效果一样,但多了一个过程、一个全局变量,还得记得每次先清空「结果」,否则第二次点按钮会接着往后追加。如果在遍历时还要顺便做别的事(比如同时统计个数、遇到某个值提前停下),用循环更合适;只是「每项算一下」的话,用「逐一映射」更省事。

结论

把列表里每个数乘以 2,用列表抽屉里的「创建新列表 逐一映射」:列表接原列表,「到」里写「列表项 × 2」,返回的就是新列表。要筛选用「过滤列表」,要汇总用「缩减列表」。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 用户的问题
  • 答案:「创建新列表 逐一映射」
  • 三个要点
  • 同一组里的另外两块
  • 老办法:自己写循环
  • 结论
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档