将集合转换为向量
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)
这似乎是一件非常容易的事情,但不管你信不信,我的 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)