Skip to content

Inverting arrays of custom index types #7

@mbauman

Description

@mbauman

MWE:

julia> struct NamedVector{T,A,B} <: AbstractArray{T,1}
           data::A
           names::B
       end
       function NamedVector(data, names)
           @assert size(data) == size(names)
           NamedVector{eltype(data), typeof(data), typeof(names)}(data, names)
       end
       Base.size(n::NamedVector) = size(n.data)
       Base.getindex(n::NamedVector, i::Int) = n.data[i]
       Base.to_index(n::NamedVector, name::Symbol) = findfirst(==(name), n.names)
       Base.checkbounds(::Type{Bool}, n::NamedVector, names::AbstractArray{Symbol}) = all(name in n.names for name in names)

julia> n = NamedVector(1:4, [:a, :b, :c, :d]);

julia> using InvertedIndices

julia> n[Not([:a,:b])]
2-element Array{Int64,1}:
 1
 2

julia> n[[:a,:b]]
2-element Array{Int64,1}:
 1
 2

The issue is that arrays don't get their elements converted by to_indices, but we check each element assuming that it did.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions