Ahsan Ali
Ahsan Ali

Reputation: 75

Scala map key consists of 2 comma-separated sets. How to extract the first key in a set?

I have a Scala map collection that looks something like this:

var collection = Map((A,B) -> 1)

The key is (A,B) and the value is 1.

My question: If I use collection.head._1, the result is (A,B) which is correct. But I want to extract A only, without B, as I need to compare A with some other variable. So the final result should be A stored in a different variable.

I tried to use collection.head._1(0) which results in error

Any does not take parameters

Upvotes: 1

Views: 114

Answers (2)

Alin Gabriel Arhip
Alin Gabriel Arhip

Reputation: 2638

You can use keySet to get all the keys as a Set[(String, String)] and then map it into the first element of each:

  val coll: Map[(String, String), Int] =
    Map(
      ("one", "elephant") -> 1,
      ("two", "elephants") -> 2,
      ("three", "elephants") -> 3
    )

  /*
  val myKeys = coll.keySet.map { case (x, _) => x }
  // equivalent to:
  val myKeys = coll.keySet.map(tup => tup._1)
  // equivalent to: */
  val myKeys = coll.keySet.map(_._1)  // Set(one, two, three)

Upvotes: 1

Johny T Koshy
Johny T Koshy

Reputation: 3887

You can try:

val collection = Map(("A","B") -> 1)
collection.map{ case ((a, b),v) => a -> v}

Upvotes: 2

Related Questions