Kolekcje Scala - Mapa

Mapa Scala to zbiór par klucz / wartość. Dowolną wartość można pobrać na podstawie jej klucza. Klucze są unikalne na mapie, ale wartości nie muszą być niepowtarzalne. Mapy są również nazywane tabelami mieszania. Istnieją dwa rodzaje map:immutable i mutable. Różnica między obiektami zmiennymi i niezmiennymi polega na tym, że gdy obiekt jest niezmienny, sam obiekt nie może zostać zmieniony.

Domyślnie Scala używa niezmiennej mapy. Jeśli chcesz użyć mutowalnej mapy, musisz zaimportowaćscala.collection.mutable.Mapklasa jawnie. Jeśli chcesz używać zarówno zmiennych, jak i niezmiennych map w tym samym, możesz nadal odnosić się do niezmiennej mapy jakoMap ale możesz odwołać się do zestawu mutowalnego jako mutable.Map.

Poniżej przedstawiono przykładowe instrukcje deklarujące niezmienne mapy -

// Empty hash table whose keys are strings and values are integers:
var A:Map[Char,Int] = Map()

// A map with keys and values.
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")

Podczas definiowania pustej mapy konieczne jest podanie typu, ponieważ system musi przypisać konkretny typ zmiennej. Jeśli chcemy dodać parę klucz-wartość do mapy, możemy użyć operatora + w następujący sposób.

A + = ('I' -> 1)
A + = ('J' -> 5)
A + = ('K' -> 10)
A + = ('L' -> 100)

Podstawowe operacje na MAP

Wszystkie operacje na mapach można wyrazić za pomocą trzech poniższych metod.

Sr.No Metody i opis
1

keys

Ta metoda zwraca iterowalną zawierającą każdy klucz w mapie.

2

values

Ta metoda zwraca iterowalną wartość zawierającą każdą wartość w mapie.

3

isEmpty

Ta metoda zwraca wartość true, jeśli mapa jest pusta, w przeciwnym razie false.

Wypróbuj następujący przykładowy program pokazujący użycie metod Map.

Przykład

object Demo {
   def main(args: Array[String]) {
      val colors = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      val nums: Map[Int, Int] = Map()
      println( "Keys in colors : " + colors.keys )
      println( "Values in colors : " + colors.values )
      println( "Check if colors is empty : " + colors.isEmpty )
      println( "Check if nums is empty : " + nums.isEmpty )
   }
}

Zapisz powyższy program w formacie Demo.scala. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

Komenda

\>scalac Demo.scala
\>scala Demo

Wynik

Keys in colors : Set(red, azure, peru)
Values in colors : MapLike(#FF0000, #F0FFFF, #CD853F)
Check if colors is empty : false
Check if nums is empty : true

Mapy łączone

Możesz użyć jednego z nich ++ operator lub Map.++() metoda łączenia dwóch lub więcej map, ale podczas dodawania map usunie zduplikowane klucze.

Wypróbuj poniższy przykładowy program, aby połączyć dwie mapy.

Przykład

object Demo {
   def main(args: Array[String]) {
      val colors1 = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      val colors2 = Map(
         "blue" -> "#0033FF", "yellow" -> "#FFFF00", "red" -> "#FF0000"
      )
      // use two or more Maps with ++ as operator
      var colors = colors1 ++ colors2
      println( "colors1 ++ colors2 : " + colors )
      // use two maps with ++ as method
      colors = colors1.++(colors2)
      println( "colors1.++(colors2)) : " + colors )
   }
}

Zapisz powyższy program w formacie Demo.scala. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

Komenda

\>scalac Demo.scala
\>scala Demo

Wynik

colors1 ++ colors2 : Map(blue -> #0033FF, azure -> #F0FFFF, 
   peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

colors1.++(colors2)) : Map(blue -> #0033FF, azure -> #F0FFFF, 
   peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

Drukowanie kluczy i wartości z mapy

Możesz iterować przez klucze i wartości Map używając pętli „foreach”. Tutaj użyliśmy metodyforeachzwiązane z iteratorem, aby przejść przez klucze. Poniżej znajduje się przykładowy program.

Przykład

object Demo {
   def main(args: Array[String]) {
      val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF","peru" -> "#CD853F")

      colors.keys.foreach{
         i =>  
         print( "Key = " + i )
         println(" Value = " + colors(i) )
      }
   }
}

Zapisz powyższy program w formacie Demo.scala. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

Komenda

\>scalac Demo.scala
\>scala Demo

Wynik

Key = red Value = #FF0000
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F

Sprawdź klucz na mapie

Możesz użyć jednego z nich Map.containsmetoda, aby sprawdzić, czy dany klucz istnieje w mapie, czy nie. Wypróbuj poniższy przykładowy program, aby sprawdzić klucz.

Przykład

object Demo {
   def main(args: Array[String]) {
      val colors = Map(
         "red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F"
      )
      if( colors.contains( "red" )) {
         println("Red key exists with value :"  + colors("red"))
      } else {
         println("Red key does not exist")
      }
      if( colors.contains( "maroon" )) {
         println("Maroon key exists with value :"  + colors("maroon"))
      } else {
         println("Maroon key does not exist")
      }
   }
}

Zapisz powyższy program w formacie Demo.scala. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

Komenda

\>scalac Demo.scala
\>scala Demo

Wynik

Red key exists with value :#FF0000
Maroon key does not exist