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