将集合转换为向量

Convert set to vector

这似乎是一件非常容易的事情,但不管你信不信,我的 google 搜索并没有带我到任何地方。我希望能够将集合转换为向量。我尝试了以下方法:

sett=Set{Int64}([1,2,3])
vecc=convert(Vector{Int64},sett)

但 Julia 似乎不知道如何进行这些转换。

我能做的一件显而易见的事情就是使用理解,例如

vecc=[el for el in sett]

但是有没有更优雅的方式呢?

提前干杯。

您可以使用 splat 运算符:

vecc = [sett...]

不过,尽管这(对我而言)比使用列表推导更优雅,但出于性能考虑,即使是相对较小的集合(因为它至少需要每个元素一个分配!)。

所以如果关心性能,你绝对应该使用 collect() 或坚持列表理解:

#items collect(set) [i for i in set] [set...]
10^1 64.934 ns (1 alloc.) 66.734 ns (1 alloc.) 856.716 ns (12 alloc.)
10^3 2.511 μs (1 alloc.) 2.256 μs (1 alloc.) 83.900 μs (2233 alloc.)
10^6 9.627 ms (2 alloc.) 10.181 ms (2 alloc.) 102.752 ms (2999281 alloc.)

从性能的角度来看,飞溅可能是个问题。相反,使用

vecc = collect(sett)