集合

概述

集合中的元素没有重复值。它支持除函数或句柄之外的所有数据类型。

创建集合

可用函数 set 来创建集合。

x=set([5,5,3,4]);
x;

set(4,3,5)

y=set(8 9 9 4 6);
y;

set(6,4,9,8)

集合的操作

交集 (&)

x & y;

set(4)

并集 (|)

x | y;

set(8,9,6,5,3,4)

子集 (-)

x-y;

set(3,5)

y-x;

set(6,9,8)

对称差 (^)

y^x;

set(5,3,6,9,8)
x^y;

set(8,5,3,6,9)

集合运算符

可用以下运算符对两个集合进行比较:<, <=, >, >=, ==, !=, 和 in。

如果X是Y的一个子集,那么 X<=Y。

x=set([4, 6]);
x;

set(6,4)
y=set(8 9 9 4 6);
y;

set(6,4,9,8)

x<=y;

1
// x是y的子集

y>=x;

1

如果X和Y有完全一样的元素,那么X==Y;如果它们的元素不完全相同,那么 X!=Y。

z=set(8 9 4 6);
y==z;

1
// y和z所含的元素完全相同

y in z;

[1,1,1,1]

x in z;

[1,1]

x!=z;

1

z>=x;

1

修改集合

向集合中追加数据:

y=set(8 9 9 4 6);
y;

set(6,4,9,8)

y.append!(3);

set(3,6,4,9,8)

用函数 erase! 从集合中删除一个元素。

y.erase!(3);

set(6,4,9,8)

用函数 clear! 清空一个集合。

y.clear!();

set()

在集合中查询

由于集合在实现上用的是哈希表,因此搜索集合中的元素通常比搜索向量中的元素要快。但是,建立哈希表可能需要大量的时间。一般只有在需要重复搜索的时候才会去建立一个集合。

x=1..20000000;
shuffle!(x);

[3123455,13242159,6705807,6107095,10703880,14924328,4435139,19888822,11885962,8535552,17956796,7349822,14777562,13918572,8570589,10706038,6508545,12362405,12742059,16485330,14219242,16979158,6060092,18157360,16132016,12510810,14509873,4402923,6277378,11762392...]

timer y=set(x);

Time elapsed: 8101.53 ms
y;

set(14261183,6712062,10066096,14147249,10177467,6928135,15470317,1348143,19503158,9781988,12709425,3357820,7105084,8740796,10555072,15523011,17319678,19672048,5332111,17767151,4598557,10395083,9715094,8630928,12345383,12834953,11278593,2637131,11464014,14018258...)

timer(1000){19884856 in x};

Time elapsed: 1191.52 ms

timer(1000){19884856 in y};

Time elapsed: 0 ms