# Using \`Enum\`s as indices

**URL:** <https://discourse.julialang.org/t/using-enum-s-as-indices/115718>\
**Category:** General Usage\
**Tags:** question, enum\
**Created:** [June 16, 2024, 4:12pm UTC](https://discourse.julialang.org/t/using-enum-s-as-indices/115718 "2024-06-16T16:12:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![sgaure](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sgaure/32/14779_2.png) [@sgaure](https://discourse.julialang.org/u/sgaure)\
**Post date:** [June 16, 2024, 4:12pm UTC](https://discourse.julialang.org/t/using-enum-s-as-indices/115718/1 "2024-06-16T16:12:29Z")

</div>

I’m using enum’s for some purposes. In particular for indexing arrays. It works fine, except for some types of broadcasting:

```julia
a = [zeros(10) for _ in 1:4];
b = [zeros(10) for _ in 1:4];
@enum Count one=1 two three four

Base.to_index(c::Count) = Int(c)

a[1] .= b[1]
a[1] .= b[one]
a[one] .= b[one]

```

The last broadcast assignment fails with

```julia
ERROR: DimensionMismatch: cannot broadcast array to have fewer non-singleton dimensions

```

I can work around with

```julia
aone = a[one]
aone .= b[one]

```

What magic does it take to make this work without the workaround?

---

<div class="post-metadata">

**Author:** ![jar1](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@jar1](https://discourse.julialang.org/u/jar1)\
**Post date:** [June 16, 2024, 6:22pm UTC](https://discourse.julialang.org/t/using-enum-s-as-indices/115718/2 "2024-06-16T18:22:08Z")

</div>

You might like [GitHub - mcabbott/AxisKeys.jl: 🎹](https://github.com/mcabbott/AxisKeys.jl) for non-numeric keys.

---

<div class="post-metadata">

**Author:** ![sgaure](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sgaure/32/14779_2.png) [@sgaure](https://discourse.julialang.org/u/sgaure)\
**Post date:** [June 16, 2024, 6:34pm UTC](https://discourse.julialang.org/t/using-enum-s-as-indices/115718/3 "2024-06-16T18:34:46Z")

</div>

> [@jar1](#):
>
> You might like [GitHub - mcabbott/AxisKeys.jl: 🎹](https://github.com/mcabbott/AxisKeys.jl) for non-numeric keys.

That sounds like an even more elaborate workaround.

---

<div class="post-metadata">

**Author:** ![Uve](https://avatars.discourse-cdn.com/v4/letter/u/82dd89/32.png) [@Uve](https://discourse.julialang.org/u/Uve)\
**Post date:** [June 16, 2024, 7:02pm UTC](https://discourse.julialang.org/t/using-enum-s-as-indices/115718/4 "2024-06-16T19:02:50Z")

</div>

One way to make it work is:

```julia
Base.dotview(A::AbstractArray, c::Count) = Base.dotview(A, Int(c))

```

but I suspect that this is not a good practice. I leave it here in case you really need it, but I’m sure there is a more reasonable way to achieve what you want.
