Check equality of two NamedTuples with order of the fields ignored

works nicely where

length(a) == length(allnames(a,b))
# and
allnames(a,b) = 
  Tuple(union(fieldnames(typeof(a)), fieldnames(typeof(b)))) 
≊(x::NamedTuple{N,T}, y::NamedTuple{N2,T2}) where {N,T,N2,T2} =
  length(N) === length(union(N,N2)) &&
  all(k->getfield(x,k) == getfield(y,k), keys(x))

a = (x=1, y=2)
b = (y=2, x=1)

a ≊ b # true
4 Likes