AmaX
AmaX

Reputation: 23

Is there a way to turn a array into a integer or float?

I'm trying to change an array with int into a single int in Julia 1.5.4 like that:

x = [1,2,3] 

Here i would try or use a code/command (here: example())

x_new = example(x)
println(x_new)
typeof(x_new) 

Ideal output would be something like this :

123
Int32

I already tried to solve this problem with parse() or push!() or something like this. But nothing worked well. I couldn't find a similar problem...

Upvotes: 2

Views: 208

Answers (4)

Przemyslaw Szufel
Przemyslaw Szufel

Reputation: 42194

Another interesting way to convert many small numbers to a bigger one is to combine raw bytes:

julia> reinterpret(Int16, [Int8(2),Int8(3)])
1-element reinterpret(Int16, ::Vector{Int8}):
 770

Note that 770 = 256*3 + 2

Or for actual Ints:

julia> reinterpret(Int128, [10,1])
1-element reinterpret(Int128, ::Vector{Int64}):
 18446744073709551626

(note that result is exactly Int128(2)^64+10)

Upvotes: 1

DNF
DNF

Reputation: 12644

You can find an issue about adding this functionality to Julia here: https://github.com/JuliaLang/julia/issues/40393

Bottom line, you don't want to use strings, and you should avoid unnecessary exponentiation, both of which will be really slow.

A very brief solution is

evalpoly(10, reverse([1,2,3]))

Spelling it out a bit more, you can do this

function joindigits(xs)
    val = 0
    for x in xs
        val = 10*val + x
    end
    return val
end

Upvotes: 7

Miklós Koren
Miklós Koren

Reputation: 158

You are looking for string concatenation and then parsing:

x_new = parse(Int64, string(x...))

Upvotes: 5

Jinguo Liu
Jinguo Liu

Reputation: 733

Is this what you need?

julia> x = [1,2,3]
3-element Vector{Int64}:
 1
 2
 3

julia> list2int(x) = sum(10 .^ (length(x)-1:-1:0) .* x)
list2int (generic function with 1 method)

julia> list2int(x)
123

Upvotes: 5

Related Questions