集合
集合是一组唯一的,不重复元素的组合。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