Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert set to vector

This seems like a really easy thing, but believe it or not my google search hasn't brought me anywhere. I want to be able to convert a set to a vector. I have tried the following:

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

but it appears Julia doesn't know how to do these conversions.

One obvious thing I can do is using comprehensions e.g.

vecc=[el for el in sett]

but is there not a more elegant way?

Cheers in advance.


2 Answers

Splatting can be problematic from a performance perspective. Instead, use

vecc = collect(sett) 
like image 125
DNF Avatar answered Mar 08 '26 20:03

DNF


You can use the splat operator :

vecc = [sett...]

Though, while this is (to me) more elegant than using list comprehension, one should avoid splatting for performance concerns, even with relatively small collections (as it requires at least one allocation per element!).

So if concerned about performance, you should definitely use collect() or stick with list comprehension :

#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.)
like image 30
EricLavault Avatar answered Mar 08 '26 21:03

EricLavault



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!