# NamedTupleTools.jl

**URL:** <https://discourse.julialang.org/t/namedtupletools-jl/27308>\
**Category:** General Usage\
**Tags:** question\
**Created:** [August 8, 2019, 9:56am UTC](https://discourse.julialang.org/t/namedtupletools-jl/27308 "2019-08-08T09:56:15Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![lamviec4](https://avatars.discourse-cdn.com/v4/letter/l/3be4f8/32.png) [@lamviec4](https://discourse.julialang.org/u/lamviec4)\
**Post date:** [August 8, 2019, 9:56am UTC](https://discourse.julialang.org/t/namedtupletools-jl/27308/1 "2019-08-08T09:56:15Z")

</div>

NamedTupleTools is a small package that makes doing a few things with `NamedTuples` a bit easier.  
_(Julia v1.0)_  
using NamedTupleTools

julia\> namedtuple(:a, :b, :c)(1, 2.0, “three”)  
(a = 1, b = 2.0, c = “three”)

#=  
namedtuple( name1, name2, … )  
namedtuple( (name1, name2, …) )  
where the `names` are all `Symbols` or all `Strings`

Generate a NamedTuple prototype by specifying or obtaining the fieldnames.  
The prototype is applied to fieldvalues, giving a completed NamedTuple.  
=#

julia\> ntproto = namedtuple( :a, :b, :c )  
NamedTuple{(:a, :b, :c),T} where T\<:Tuple

julia\> nt123 = ntproto(1, 2, 3)  
(a = 1, b = 2, c = 3)

julia\> ntAb3 = ntproto(“A”, “b”, 3)  
(a = “A”, b = “b”, c = 3)

julia\> isprototype(ntproto)  
true

julia\> isprototype(nt123)  
false

julia\> delete!(nt123, :a) === (b = 2, c = 3)  
true  
julia\> delete!(nt123, :a, :c) === delete!(nt123, (:a, :c)) === (b = 2,)  
true  
julia\> delete!(ntproto, :b) === namedtuple(:a, :c)  
true

julia\> ntproto1 = namedtuple(:a, :b);  
julia\> ntproto2 = namedtuple(:b, :c);

julia\> merge(ntproto1,ntproto2)  
NamedTuple{(:a, :b, :c),T} where T\<:Tuple

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [August 8, 2019, 10:21am UTC](https://discourse.julialang.org/t/namedtupletools-jl/27308/2 "2019-08-08T10:21:46Z")

</div>

Perhaps you are aware of this, but `NamedTuple{(:a,:b,:c)}` can also be used as a constructor, eg

```julia
julia> ntproto = NamedTuple{(:a,:b,:c)}
NamedTuple{(:a, :b, :c),T} where T<:Tuple

julia> ntproto((1, 2.0, "three"))
(a = 1, b = 2.0, c = "three")

```

Also, making a method for `Base.delete!` is

1. [type piracy](https://docs.julialang.org/en/v1/manual/style-guide/#Avoid-type-piracy-1),

2. misleading, because it does not modify the argument.
