- 介绍
- 创建空字典
- 创建字典
- 键值对
- 获取键的值
- 设置键的值
- 删除键的条目
- 获取键路径的值
- 设置键路径的值
- 获取键列表
- 获取值列表
- 键是否在字典中?
- 字典的长度
- 键值对列表转换为字典
- 字典转换为键值对列表
- 复制字典(深拷贝)
- 合并字典
- 在此层级遍历
- 遍历键路径列表
- 是否为字典?
- 案例:字典遍历
- 案例:字典转JSON
- 案例:JSON转字典
目录:
- 介绍
- 创建空字典
- 创建字典
- 键值对
- 获取键的值
- 设置键的值
- 删除键的条目
- 获取键路径的值
- 设置键路径的值
- 获取键列表
- 获取值列表
- 键是否在字典中?
- 字典的长度
- 键值对列表转换为字典
- 字典转换为键值对列表
- 复制字典(深拷贝)
- 合并字典
- 在此层级遍历
- 遍历键路径列表
- 是否为字典?
拓展案例:
介绍
字典在其他语言中称为映射、关联数组或列表,是一种将一个值(通常称为键)与另一个值关联的数据结构。
Q:App Inventor 2 什么情况下需要使用字典?
A:列表能完成字典的绝大部分功能,不过字典具有比列表更好的查找性能,因此如果要对数据结构执行大量的操作,建议优先使用字典。
显示字典的常见方法是使用 JavaScript 对象表示法 (JSON),例如:
{
"id": 1,
"name": "Tim the Beaver",
"school": {
"name": "Massachusetts Institute of Technology"
},
"enrolled": true,
"classes": ["6.001", "18.01", "8.01"]
}
上面的示例显示,在 JSON 中,键(在 :
之前引用的文本)可以映射到不同类型的值。
允许的类型包括数字、文本、其他字典、布尔值和列表。在块语言中,可以按如下方式构建该字典:
图 1:上面显示的 JSON 代码片段的块表示
创建空字典
创建空字典
块创建一个没有任何键值对的字典。
可以使用 设置键的值 块将条目添加到空字典中。
通过使用蓝色块拓展按钮添加键值对
。
创建空字典
块也可以作为 创建字典
块的条目。
创建字典
用于创建一个预先带有一组已知 键值对
的字典,可以使用 设置键的值 添加其他条目。
键值对
键值对
块是用于构造字典项的特殊块。
获取键的值
获取键的值
块检查字典是否包含给定键的对应值,如果是,则返回该值;否则,返回“未找到”参数的值。
设置键的值
将 字典
中给定 键
的对应值设置为 值
。
如果键
不存在映射,则会创建一个新映射;否则,现有值将被新值替换。
删除键的条目
删除键的条目
块删除字典中给定键的键值映射。如果字典中不存在该键的条目,则不会修改字典。
获取键路径的值
获取键路径的值
块是 获取键的值
块的更高级版本
,它不是获取特定键的值,而是逐层遍历路径,逐层深入数据结构获取值。
获取键的值
块等同于获取键路径的值
块路径长度为 1。
例如,以下两个块将返回 "Tim the Beaver"
:
它从初始字典开始,使用提供的“路径”遍历数据结构,以便检索深度嵌套在复杂数据结构中的值。
它最适合处理来自 Web 服务的 JSON 数据,从初始输入开始,它获取“键路径”中的第一个元素,并检查该点是否存在键(如果输入是字典)或索引(如果输入是列表),如果是,它选择该项目作为输入,并继续检查“关键路径”中的下一个元素,继续检查整个路径,此时它返回该位置的内容,或者“未找到”参数的值。
不明白?看例子最直观!
{
"id": 1,
"name": "Tim the Beaver",
"school": {
"name": "Massachusetts Institute of Technology"
},
"enrolled": true,
"classes": ["6.001", "18.01", "8.01"]
}
例如,给定上面的 JSON 字典,以下使用 获取键路径的值
将产生结果 "Massachusetts Institute of Technology"
。
获取键路径的值
允许路径包含表示混合字典和列表时要遍历的元素索引的数字。
例如,如果我们想知道 Tim 正在上的第二堂课,我们可以执行以下操作:
这将返回值:"18.01"
设置键路径的值
设置键路径的值
块更新数据结构中特定 键路径
处的值。
它是 获取键路径的值 的镜像,它检索特定 键路径
处的值。路径必须有效,最后一个键除外,如果映射不存在,则将创建到新值的映射。否则,现有值将替换为新值。
获取键列表
返回字典中的键列表,是一个列表
对象。
获取值列表
返回一个包含字典中的值的列表,是一个列表
对象。
修改值列表中值的内容也会修改字典中的值。
键是否在字典中?
键是否在字典中?
测试字典中是否存在该键,如果存在则返回 真
,否则返回 假
。
字典的长度
字典的长度
块返回字典中存在的键值对的数量。
键值对列表转换为字典
将((key1 value1) (key2 value2) ...)
形式的键值对列表转换为键映射到其值的字典。
由于字典具有比键值对列表更好的查找性能,因此如果要对数据结构执行大量的操作,建议首先使用此块将键值对列表转换为字典。
字典转换为键值对列表
将字典转换为键值对列表。此块执行 键值对列表转换为字典 相反的操作。
复制字典(深拷贝)
复制字典
制作给定字典的深层副本(深拷贝),也即是所有值都会递归复制,并且更改副本中的值不会更改原始值。
合并字典
该块将键值对从一个字典复制到另一个字典中,覆盖目标字典中的任何键。
在此层级遍历
该块是一个专用块,可以在 遍历键路径列表
的键路径中使用。
当在遍历中遇到时,它会导致该级别的每个项目都被探索。对于字典来说,这意味着每个值都会被访问;对于列表,将访问列表中的每个项目。
这可用于聚合字典中的项目列表项数据,例如数据库中由 JSON 对象表示的每个人的名字。有关示例,请参阅 遍历键路径列表
块。
遍历键路径列表
遍历键路径列表
块的工作方式与 获取键路径的值 类似,但会创建一个值列表,而不是返回单个值。
它的工作原理是从给定的字典开始,沿着给定的路径沿着对象树走下去。但与 获取键路径的值 不同,它的路径可以由三种主要类型组成:字典键
、列表索引
和 在此层级遍历
块。
如果提供了键或索引,则在树中的该点采用特定路径。如果指定了 在此层级遍历
,则将连续跟踪该点的每个值(广度优先),此时从路径中的下一个元素继续遍历。与整个路径匹配的任何元素都会添加到输出列表中。
例子
参考以下 JSON 和块:
{
"people": [{
"first_name": "Tim",
"last_name": "Beaver"
},{
"first_name": "John",
"last_name": "Smith",
},{
"first_name": "Jane",
"last_name": "Doe"
}]
}
如果 global data
包含由 JSON 表示的字典,则 遍历键路径列表
块将生成列表 ["Tim", "Beaver" ]
。
首先,选择“people”
标记的值,即人员列表。接下来,选择列表中的第一个元素。
最后,在此层级遍历
块选择该点对象中的值,即值 "Tim"
和 "Beaver"
。
还可以在包含列表的层级中使用 在此层级遍历
。例如,以下块选择结构中所有人员的名字,即 ["Tim", "John", "Jane"]
。
此块还可以与使用 Web.XMLTextDecodeAsDictionary
块解析的 XML 一起使用。
参考以下 XML 文档:
<schedule>
<day>
<room name="Hewlitt" />
<room name="Bleil" />
</day>
<day>
<room name="Kiva" />
<room name="Star" />
</day>
</schedule>
可以使用以下块来获取第一天的房间名称列表,即["Hewlitt", "Bleil"]
。
是否为字典?
该块测试给它的 对象
是否是一个字典。如果对象
是字典,它将返回真
,否则返回假
。
案例:字典遍历
字典代码块中没有提供遍历的方法,遍历方法在控制代码块 > 从字典循环中,参考代码如下:
案例:字典转JSON
直接将字典赋值给文本,文本内容自动就是JSON格式字符串。如下:
结果是:{“key1”:”val1”,”key2”:”val2”}
前提是“Screen1”的“以JSON格式显示列表”属性已经勾选(默认是勾选的)。
案例:JSON转字典
转换步骤:Web客户端.解码JSON文本,返回值就是一个字典,这时就可以从这个字典中查找我们需要的键值数据了,参考代码如下: