向量中集合的并集

Union of collection of sets in vector

如果我有一个集合向量,比如说,

vec_of_sets = [Set(vec1), Set(vec2), ..., Set(vecp)]

如何获得等于向量中集合并集的集合?也就是我怎样才能高效的写出下面的内容?

S1 = Set(vec1);
union!(S1, Set(vec2))
union!(S1, Set(vec3))
...
union!(S1, Set(vecp))

我真的不知道从哪里开始!

提前致谢。


编辑:我试过使用生成函数的解决方案,但它不起作用:

union(j for j in vec_of_sets)

我想你应该使用 reduce:

reduce(union, vec_of_sets)

但你也可以使用 splatting(使用 ...):

union(vec_of_sets...)

FWIW,您也可以在尝试中使用拆分:

union((j for j in vec_of_sets)...)

最好最快的方法是:

Set(Iterators.flatten(vec_of_sets))

它的速度大约是另一个 post 提出的其他可能方法的两倍,并且分配了一半以上的内存。

以下是一些基准:

julia> v = [Set(1:3), Set(2:6), Set(4:8)];

julia> @btime Set(Iterators.flatten($v));
  270.492 ns (4 allocations: 400 bytes)

julia> @btime reduce(union, $v);
  550.000 ns (11 allocations: 1.25 KiB)

julia> @btime union($v...);
  506.250 ns (11 allocations: 944 bytes)

julia> @btime union((j for j in $v)...);
  699.286 ns (15 allocations: 1.03 KiB)