/MutableNamedTuples.jl

Basically what it says on the tin

Primary LanguageJuliaMIT LicenseMIT

MutableNamedTuples.jl

Sometimes you want a named tuple, but mutable. This works by wrapping a named tuple where all the elements are mutable Ref s and then pretending that it’s elements are that contents of the Ref s instead.

julia> using MutableNamedTuples

julia> mnt = MutableNamedTuple(a=1, b= 2)
MutableNamedTuple(a = 1, b = 2)

julia> mnt.a = 2
2

julia> mnt
MutableNamedTuple(a = 2, b = 2)

A shorthand MNT can also be used:

julia> A = [MNT(a = 1, b=2) MNT(a=3, b=6)
            MNT(a =-1, b=4) MNT(a=1, b=1)]
2×2 Array{MutableNamedTuple{(:a, :b),Tuple{Base.RefValue{Int64},Base.RefValue{Int64}}},2}:
 MutableNamedTuple(a = 1, b = 2)   MutableNamedTuple(a = 3, b = 6)
 MutableNamedTuple(a = -1, b = 4)  MutableNamedTuple(a = 1, b = 1)

julia> A[1, 1].a = 100
100

julia> A
2×2 Array{MutableNamedTuple{(:a, :b),Tuple{Base.RefValue{Int64},Base.RefValue{Int64}}},2}:
 MutableNamedTuple(a = 100, b = 2)  MutableNamedTuple(a = 3, b = 6)
 MutableNamedTuple(a = -1, b = 4)   MutableNamedTuple(a = 1, b = 1)   

You should probably use StructArrays.jl though.