Zulip Chat Archive

Stream: Is there code for X?

Topic: Array counterparts of `List.enum`


Asei Inoue (Jan 06 2024 at 09:01):

example : [1, 2, 3].enum = [(0,1),(1,2),(2,3)] := by rfl

variable (α : Type)

-- I want a array version of `List.enum`
def Array.enum (ar : Array α) : Array (Nat × α) :=
  let indexes := List.range ar.size |> List.toArray
  Array.zip indexes ar

#eval #[1, 2, 3].enum

Asei Inoue (Jan 06 2024 at 09:03):

After searching the library, it appears that there is no Array counterpart to the List.enum function. Am I missing something?

Asei Inoue (Jan 06 2024 at 09:04):

If you know the List.range counterpart of Array, please let me know.

Damiano Testa (Jan 06 2024 at 09:11):

I think that docs#Array.range exists. I do not know about enum.

Asei Inoue (Jan 06 2024 at 09:13):

@Damiano Testa
Thanks.

import Std.Data.Array.Init.Basic

def Array.enum (ar : Array α) : Array (Nat × α) :=
  let indexes := Array.range ar.size
  Array.zip indexes ar

#eval #[1, 2, 3].enum

Damiano Testa (Jan 06 2024 at 09:15):

In that same file, there is also this:

#eval Array.zipWithIndex #[3, 2, 1]  -- #[(3, 0), (2, 1), (1, 2)]

Asei Inoue (Jan 06 2024 at 09:17):

Thank you. The zipWithIndex is very close to what I want, but in a different order of elements than the enum.

Asei Inoue (Jan 06 2024 at 09:37):

If Array.enum is indeed missing from the library, I thought it should be added.


Last updated: May 02 2025 at 03:31 UTC