Skip to content

MAP

为了弥补Minecraft原版NBT中复合标签在操作上的不便利,MCFPP封装了一种新的数据结构:mapmap是一种键值对的数据结构,它的键只能是字符串,而值只能是同一种类型。

基本使用

使用map<type T>来声明一个map。和dict一样,在map中,可以使用[]来访问键值对。

mcfpp
map<int> m = {
    "a": 1,
    "b": 2,
    "c": 3
};

print(m["a"]); #输出1

m["d"] = 4; #添加一个新的键值对

map的操作

MCFPP标准库提供了一系列的map操作函数。

函数名参数返回值作用
clearvoidvoid清空map
containsKeystring keybool判断map中是否包含指定键
containsValueT valuebool判断map中是否包含指定值
isEmptyvoidbool判断map是否为空
getKeysvoidlist<string>获取map中所有的键
getValuesvoidlist<T>获取map中所有的值
removestring keyvoid移除指定键的键值对
mergemap<T> mapvoid合并两个map
sizevoidint获取map的大小

map的遍历未来特性

使用foreach循环可以简单地遍历map中的所有键值对。

mcfpp
map<int> m = {
    "a": 1,
    "b": 2,
    "c": 3
};

foreach(k, v in m){
    print(k + ": " + v);
}

foreach(k in m.getKeys()){
    print(k + ": " + m[k]);
}

foreach(v in m.getValues()){
    print(v);
}

Tip

dict仅由复合标签组成相比,map的结构更为复杂。通常来说,一个map由三个部分组成,即一个键的列表,一个值的列表,以及键值构成的复合标签。这种结构意味着,在写入的时候,map的开销将会比dict更高。但是这种结构同样也为map带来了更多的功能。

具体来说,以下面的代码为例:

mcfpp
map m = {};

m["qwq"] = "pwp";
m["owo"] = "uwu";
m["nya"] = "meow";

在存储的时候,map的结构如下:

js
namespace.stack_frame:[
    {
        m:{
            key:["qwq","owo","nya"],        //键列表
            value:["pwp","uwu","meow"],     //值列表
            data:{
                "qwq":"pwp","owo":"uwu","nya":"meow"    //键值对,相当于一个dict
            }    
        }
    }
]