将集合转换为向量

3
这似乎是一件非常简单的事情,但不管你信不信,我的谷歌搜索都没有帮助到我。我想要能够将一个集合转换为向量。我尝试了以下方法:
sett=Set{Int64}([1,2,3])
vecc=convert(Vector{Int64},sett)

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

我可以做的一件显而易见的事情是使用列表推导,例如:

vecc=[el for el in sett]

还有没有更优雅的方法?

提前致谢。

2个回答

2
分片(Splatting)在性能方面可能存在问题。相反,建议使用:
vecc = collect(sett) 

1
你可以使用扩展运算符 splat
vecc = [sett...]

虽然这种方法(对我来说)比使用列表推导更加优雅,但应该避免使用splatting以考虑性能问题,即使是在相对较小的集合中(因为它每个元素至少需要一次分配!)。
因此,如果关心性能,你应该使用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.)

虽然这对于小集合有效,但并不推荐。当集合变大时,它会给编译器带来很多麻烦,并且变得非常缓慢。 - StefanKarpinski
@StefanKarpinski 我知道为了性能考虑,应该避免使用splatting,但我认为它比列表推导式更优雅(只是回答问题..你可以这样做,而不是应该这样做)。我进行了一些编辑,并添加了基准测试以便于非专业人士进行比较。 - EricLavault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接