Коллекции Scala - Карта
Карта Scala - это набор пар ключ / значение. Любое значение может быть получено на основе его ключа. Ключи уникальны на карте, но значения не обязательно должны быть уникальными. Карты также называются хеш-таблицами. Есть два вида карт:immutable и mutable. Разница между изменяемыми и неизменяемыми объектами заключается в том, что, когда объект неизменен, сам объект не может быть изменен.
По умолчанию Scala использует неизменяемую карту. Если вы хотите использовать изменяемую карту, вам придется импортироватьscala.collection.mutable.Mapкласс явно. Если вы хотите использовать как изменяемые, так и неизменяемые карты в одном и том же, вы можете продолжать ссылаться на неизменяемую карту какMap но вы можете ссылаться на изменяемый набор как mutable.Map.
Ниже приведены примеры операторов для объявления неизменяемых карт.
// 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")
При определении пустой карты аннотация типа необходима, поскольку системе необходимо присвоить конкретный тип переменной. Если мы хотим добавить пару ключ-значение в карту, мы можем использовать оператор + следующим образом.
A + = ('I' -> 1)
A + = ('J' -> 5)
A + = ('K' -> 10)
A + = ('L' -> 100)
Основные операции с MAP
Все операции с картами можно описать следующими тремя способами.
Старший Нет | Методы и описание |
---|---|
1 | keys Этот метод возвращает итерацию, содержащую каждый ключ на карте. |
2 | values Этот метод возвращает итерацию, содержащую каждое значение на карте. |
3 | isEmpty Этот метод возвращает true, если карта пуста, иначе false. |
Попробуйте следующий пример программы, демонстрирующий использование методов Map.
пример
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 )
}
}
Сохраните указанную выше программу в Demo.scala. Следующие команды используются для компиляции и выполнения этой программы.
Команда
\>scalac Demo.scala
\>scala Demo
Вывод
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
Объединение карт
Вы можете использовать либо ++ оператор или Map.++() для объединения двух или более карт, но при добавлении карт он удалит повторяющиеся ключи.
Попробуйте выполнить следующий пример программы для объединения двух карт.
пример
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 )
}
}
Сохраните указанную выше программу в Demo.scala. Следующие команды используются для компиляции и выполнения этой программы.
Команда
\>scalac Demo.scala
\>scala Demo
Вывод
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)
Печать ключей и значений с карты
Вы можете перебирать ключи и значения карты, используя цикл foreach. Здесь мы использовали методforeachсвязанный с итератором для просмотра ключей. Ниже приведен пример программы.
пример
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) )
}
}
}
Сохраните указанную выше программу в Demo.scala. Следующие команды используются для компиляции и выполнения этой программы.
Команда
\>scalac Demo.scala
\>scala Demo
Вывод
Key = red Value = #FF0000
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F
Найдите ключ на карте
Вы можете использовать либо Map.containsметод, чтобы проверить, существует ли данный ключ на карте или нет. Попробуйте следующий пример программы для проверки ключей.
пример
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")
}
}
}
Сохраните указанную выше программу в Demo.scala. Следующие команды используются для компиляции и выполнения этой программы.
Команда
\>scalac Demo.scala
\>scala Demo
Вывод
Red key exists with value :#FF0000
Maroon key does not exist