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