集合

集合是一组唯一的,不重复元素的组合。Silk的集合操作通过一组内置函数实现。

创建集合
创建集合采用_fun("set_create", values...)函数,values是创建集合时的一组初始化数据,可以任意多个,任意的数据类型,创建成功返回集合的句柄。
set=_fun("set_create");//创建一个空集合
set2=_fun("set_create",3,2,2,23,"good");//创建一个包含2,3,23,good的集合,重复的2将被忽略


添加元素
向集合添加元素采用_fun("set_insert", set, value)函数,set是集合的句柄,value是插入集合的元素。插入成功返回true。
_fun("set_insert",set,11);
_fun("set_insert",set,22);
_fun("set_insert",set,22);//重复添加,将被忽略


查找元素
从集合中查找元素采用_fun("set_find", set, value)函数,set是集合的句柄,value是需要查找的元素值。查找成功返回元素值,失败返回null。
ret=_fun("set_find",set,"good");
if(ret)
{
    print(ret);//打印找到的元素值
}


删除元素
从集合中删除元素采用_fun("set_erase", set, value)函数,set是集合的句柄,value是需要删除的元素值。删除成功返回true,失败返回null。
如果要删除遍历集合时游标指向的元素,采用_fun("set_erase", set, iter)函数,iter是遍历时的游标,删除成功返回被删除游标的下一个游标。
_fun("set_erase",set,2);//删除集合中的元素2
i=_fun("set_begin",set);//返回指向第一个元素的游标
i=_fun("set_erase",set,i);//删除第一个元素,返回指向下一个元素的游标


清空元素
清空集合中的所有元素采用_fun("set_clear", set)函数,set是集合的句柄。

元素个数
获取集合中的元素个数采用_fun("set_size", set)函数,set是集合的句柄。空集合的元素个数为0。

遍历集合
集合的存储方式和字典类似,也是一种排了序的树形结构,需要通过函数_fun("set_begin", set)_fun("set_next", set, iter)_fun("set_get", set, iter) 遍历访问集合中的所有元素,set是集合的句柄,iter是指向元素的游标。
main()
{
    set=_fun("set_create",3,11,2,2,23,"good","ok");
    i=_fun("set_begin",set);//返回指向第一个元素的游标
    while(i)
    {
        print(_fun("set_get",set,i));//根据游标取得元素值,打印
        i=_fun("set_next",set,i);//返回指向下一个元素的游标,如果到达尾部,返回null
    }
}
运行结果:
good
ok
2
3
11
23


释放集合
集合使用完毕需要调用_fun("set_free", set)函数释放创建的集合,set是集合的句柄。
set=_fun("set_create",3,2);//创建集合
_fun("set_erase",set,2);//删除集合中的元素2
_fun("set_free",set);//释放集合


并集
并集是把两个集合的所有元素合并在一起组成一个新的集合,计算并集需调用_fun("set_union", set1, set2)函数:
main()
{
    set1=_fun("set_create",3,11,2,2,23,"good","ok");
    set2=_fun("set_create",2,32,"ok",2.35);
    
    set3=_fun("set_union",set1,set2);//合并set1,set2生成并集set3
    //遍历并集set3
    for(i=_fun("set_begin",set3);i!=null;i=_fun("set_next",set3,i))
        print(_fun("set_get",set3,i));
        
    _fun("set_free",set1);
    _fun("set_free",set2);
    _fun("set_free",set3);//新生成的并集也需要释放
}
运行结果:
good
ok
2
3
11
23
32
2.350000


交集
交集是找出两个集合中共有的元素组成一个新的集合,计算交集需调用_fun("set_intersection", set1, set2)函数:
main()
{
    set1=_fun("set_create",3,11,2,2,23,"good","ok");
    set2=_fun("set_create",2,32,"ok",2.35);
    
    set3=_fun("set_intersection",set1,set2);//计算set1和set2的交集,生成set3
    //遍历set3
    for(i=_fun("set_begin",set3);i!=null;i=_fun("set_next",set3,i))
        print(_fun("set_get",set3,i));
        
    _fun("set_free",set1);
    _fun("set_free",set2);
    _fun("set_free",set3);//新生成的集合也需要释放
}
运行结果:
ok
2


差集
差集是set1,set2两个集合,由所有属于set1且不属于set2的元素组成的集合,计算差集需调用_fun("set_difference", set1, set2)函数:
main()
{
    set1=_fun("set_create",3,11,2,2,23,"good","ok");
    set2=_fun("set_create",2,32,"ok",2.35);
    
    set3=_fun("set_difference",set1,set2);//计算set1和set2的差集
    //遍历差集set3
    for(i=_fun("set_begin",set3);i!=null;i=_fun("set_next",set3,i))
        print(_fun("set_get",set3,i));
        
    _fun("set_free",set1);
    _fun("set_free",set2);
    _fun("set_free",set3);//新生成的集合也需要释放
}
运行结果:
good
3
11
23