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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions