映射表(DS Maps)是一种数据结构,可用于存储成对的键、值等数据内容 映射表这种数据结构非常有用,因为它可以同时存储成对的键值内容。比如说,在一个游戏中我们的角色通常会有很多道具(键),而每一种道具又会有不同的数量(值),比如一款RPG中,你可以同时拥有10个血瓶,5个蓝瓶和100金币。映射表就是用来存储这种成对的键值内容的,你可以任意添加映射关系,并可以很轻松的通过指定的键来查询对应的值的数据。不过,在正式使用这功能之前,你也需要了解几个基础知识!映射表不会以任何方式进行排序,这意味着为了找到某个键的值可能需要把整个映射表遍历一遍(可能会慢),而且映射表中不能同时保存两个相同的键,一个键也只能对应一个值。 注意:当前版本中的“ds_map”函数跟以往版本中有区别,因此直接导入老版本的项目可能无法正常工作 注意:跟所有动态资源相同,数据结构会占用设备内存,因此在不再使用时应当将其销毁以释放内存,否则可能会造成内存泄漏,从而影响游戏运行速度和效率,最后导致游戏报错奔溃。 以下是映射表的各个函数方法: * [ds_map_exists](ds_map_exists.md) * [ds_map_create](ds_map_create.md) * [ds_map_add](ds_map_add.md) * [ds_map_clear](ds_map_clear.md) * [ds_map_copy](ds_map_copy.md) * [ds_map_replace](ds_map_replace.md) * [ds_map_delete](ds_map_delete.md) * [ds_map_empty](ds_map_empty.md) * [ds_map_size](ds_map_size.md) * [ds_map_find_first](ds_map_find_first.md) * [ds_map_find_last](ds_map_find_last.md) * [ds_map_find_next](ds_map_find_next.md) * [ds_map_find_previous](ds_map_find_previous.md) * [ds_map_find_value](ds_map_find_value.md) * [ds_map_read](ds_map_read.md) * [ds_map_write](ds_map_write.md) * [ds_map_destroy](ds_map_destroy.md) - - - - - 另外还有四种特殊的方法可以用于保存和读取映射表,这些方法会对映射表进行加密存储,因此这些方法可用来保存内购信息、密码以及较为敏感的游戏信息等 * [ds_map_secure_save](ds_map_secure_save.md) * [ds_map_secure_save_buffer](ds_map_secure_save_buffer.md) * [ds_map_secure_load](ds_map_secure_load.md) * [ds_map_secure_load_buffer](ds_map_secure_load_buffer.md) 除了以上这些方法,你还可以使用通配符(或称访问器)来添加或修改映射表中的内容,语法如下: ```javascript map_index[? key] ``` - - - - - ## JSON和映射表 映射表有一个重要的用途就是使用json,因此还有相对应的特殊函数: [ds_map_add_list](ds_map_add_list.md) [ds_map_add_map](ds_map_add_map.md) [ds_map_replace_list](ds_map_replace_list.md) [ds_map_replace_map](ds_map_replace_map.md) 另外也有两个与ds_lists联动的方法: [ds_list_mark_as_list](ds_list_mark_as_list.md) [ds_list_mark_as_map](ds_list_mark_as_map.md) 注意:尽管这些函数允许你在映射表中嵌套列表和另一个映射表,但这些方法仅适用于JSON内容,如果你尝试将这些数据直接保存到磁盘上则无法正确读取。 *注意:如果你想确认数据结构是否存在,你可以使用"ds_exists()"方法来判断。*