# Switching data type in a vector

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