I have a vector V::Vector{Tuple{Int64, Int64}} but sometimes one of the second entries becomes Float64. I don’t want to make it V::Vector{Tuple{Int64, Float64}} or V::Vector{Tuple{Int64, Any}} for performance. Is there a way to handle this such that V is the vector of Tuples with Int64 when all entries are Int64 but when the second entry is float64 V becomes Vector{Tuple{Int64, Float64}} to accept the float64? Thank you in advance.
The question is a bit unclear. You have an array V = Tuple{Int,Int}[]
, but want it to change type if you do something like push!(V, (1, 2.3))
or V[i] = (1, 2.3)
? Or do you want a function which sometimes returns a Tuple{Int, Int}
vector and sometimes Tuple{Int, Float64}
vector depending on something?
The first thing won’t work, the second is possible. It all depends on your concrete problem.
2 Likes
Firstly, why can’t you make it Vector{Tuple{Int, Float64}}
? I cannot see why that should affect performance. If the values you want to store are sometimes non-integer valued, then you should be using Tuple{Int, Float64}
.
As for converting, you can use reinterpret
, but be aware that this will change the numerical values of the second tuple member:
julia> V = [(2, 3), (9, 5)]
2-element Vector{Tuple{Int64, Int64}}:
(2, 3)
(9, 5)
julia> W = reinterpret(Tuple{Int, Float64}, V)
2-element reinterpret(Tuple{Int64, Float64}, ::Vector{Tuple{Int64, Int64}}):
(2, 1.5e-323)
(9, 2.5e-323)
2 Likes