LondonMassive
LondonMassive

Reputation: 447

How to move contents of one element in a map to another element in Scala

I am trying to transfer/copy an element in a map, to another element in the map in Scala. For example:

Map(0 -> 5)

Let's say this is the initial state of the map. What I want to happen is the following:

Map(0 -> 0, 1 -> 5)

So after the change has happened, 0 that initially points to 5, but after the transformation 0 will point to 0, and a new element is added (1) that points to 5.

I have tried the following:

theMap + (pointer -> (theMap(pointer) + 1))

However, I get the following error:

java.util.NoSuchElementException: key not found: 1

Thanks for any help!

Upvotes: 0

Views: 154

Answers (1)

This should do the trick.

def transfer(pointer: Int)(map: Map[Int, Int]): Map[Int, Int] =
  map.get(key = pointer)  match {
    case Some(value) =>
      map ++ Map(
        pointer -> 0,
        (pointer + 1) -> value
      )

    case None =>
      // Pointer didn't exist, what should happen here?
      map // For now returning the map unmodified.
  }

And you can use it like this:

transfer(pointer = 0)(map = Map(0 -> 5))
// res: Map[Int,Int] = Map(0 -> 0, 1 -> 5)

Upvotes: 1

Related Questions