How do I reverse a list in EK9?

← Common Collection Tasks · Ref: Q187

EK9 Lists have a .reverse() method that returns a new reversed list. The original list is unchanged.

REVERSE

Create a new list in reverse order:

  reversed <- myList.reverse()

The original list is not modified.

IMMUTABLE BY DEFAULT

Like all EK9 non-mutating operations, reverse() returns a new value. To update the variable, assign the result:

  myList :=: myList.reverse()

See Q88 for List operations. See Q120 for sorting.

Example

defines module qa.collectiontasks.reverselist

  defines program
    ReverseListDemo()
      stdout <- Stdout()

      // === REVERSE ===

      numbers <- [1, 2, 3, 4, 5]
      reversed <- numbers.reverse()
      stdout.println(`Original: ${numbers}`)
      stdout.println(`Reversed: ${reversed}`)

      // Original is unchanged
      require numbers <> reversed

      // === REVERSE STRINGS ===

      names <- ["Alice", "Bob", "Charlie"]
      reversedNames <- names.reverse()
      stdout.println(`Names: ${names}`)
      stdout.println(`Reversed names: ${reversedNames}`)

      // === DOUBLE REVERSE ===

      doubleReversed <- reversed.reverse()
      stdout.println(`Double reversed: ${doubleReversed}`)
      require doubleReversed == numbers

      // === EMPTY LIST REVERSE ===

      emptyList <- List() of Integer
      emptyReversed <- emptyList.reverse()
      stdout.println(`Empty reversed: ${emptyReversed}`)
      require emptyReversed is empty

      // === SINGLE ITEM ===

      single <- [42]
      singleReversed <- single.reverse()
      stdout.println(`Single reversed: ${singleReversed}`)
      require single == singleReversed

Common mistakes

E50060 — List does not have a flip() method. The correct method for reversing is reverse(). Calling a non-existent method triggers E50060 — method not resolved. See ek9 -h E50060 for details.

Incorrect:

reversed <- numbers.flip()

Correct:

reversed <- numbers.reverse()
Other ways to ask this
  • How do I flip the order of a list in EK9?
  • What is the EK9 equivalent of list.reverse()?
  • How do I invert the order of elements in a list in EK9?

Coming from another language?

Java: Collections.reverse(list) modifies in place, no built-in immutable reverse. Python: list.reverse() modifies in place, reversed(list) returns iterator, list[::-1] for new reversed list. Rust: vec.reverse() modifies in place, .iter().rev() for lazy reverse. Go: manual loop, no built-in reverse. JavaScript: arr.reverse() modifies in place, [...arr].reverse() for new. Kotlin: list.reversed() returns new list. EK9: list.reverse() returns new list, original unchanged.

Keywords: list, sort, backwards, task, reverse, order, collection, flip, invert