scalabook
Maps
Map
— это итерируемая коллекция, состоящая из пар ключей и значений.
В Scala есть как изменяемые, так и неизменяемые типы Map
.
В этом разделе показано, как использовать неизменяемый Map
.
Создание Map
Неизменяемая Map
создается следующим образом:
val states = Map( "AK" -> "Alaska", "AL" -> "Alabama", "AZ" -> "Arizona")
Перемещаться по элементам Map
в цикле for
можно следующим образом:
for (k, v) <- states do println(s"key: $k, value: $v")// key: AK, value: Alaska// key: AL, value: Alabama// key: AZ, value: Arizona
Доступ к элементам Map
Доступ к элементам Map
осуществляется через указание в скобках значения ключа:
val ak = states("AK")// ak: String = "Alaska"val al = states("AL")// al: String = "Alabama"
На практике также используются такие методы, как keys
, keySet
, keysIterator
, циклы for
и функции высшего порядка, такие как map
, для работы с ключами и значениями Map
.
Добавление элемента в Map
При добавлении элементов в неизменяемую карту с помощью +
и ++
, создается новая карта:
val a = Map(1 -> "one")// a: Map[Int, String] = Map(1 -> "one")val b = a + (2 -> "two")// b: Map[Int, String] = Map(1 -> "one", 2 -> "two")val c = b ++ Seq( 3 -> "three", 4 -> "four")// c: Map[Int, String] = Map(1 -> "one", 2 -> "two", 3 -> "three", 4 -> "four")
Удаление элементов из Map
Элементы удаляются с помощью методов -
или --
.
В случае неизменяемой Map
создается новый экземпляр, который нужно присвоить новой переменной:
val a = Map( 1 -> "one", 2 -> "two", 3 -> "three", 4 -> "four")// a: Map[Int, String] = Map(1 -> "one", 2 -> "two", 3 -> "three", 4 -> "four")val b = a - 4 // b: Map[Int, String] = Map(1 -> "one", 2 -> "two", 3 -> "three") val c = a - 4 - 3// c: Map[Int, String] = Map(1 -> "one", 2 -> "two")
Обновление элементов в Map
Чтобы обновить элементы на неизменяемой Map
, используется метод update
(или оператор +
):
val a = Map( 1 -> "one", 2 -> "two", 3 -> "three")// a: Map[Int, String] = Map(1 -> "one", 2 -> "two", 3 -> "three")val b = a.updated(3, "THREE!")// b: Map[Int, String] = Map(1 -> "one", 2 -> "two", 3 -> "THREE!")val c = a + (2 -> "TWO...")// c: Map[Int, String] = Map(1 -> "one", 2 -> "TWO...", 3 -> "three")
Перебор элементов в Map
Элементы в Map
можно перебрать с помощью цикла for
, как и для остальных коллекций:
val states = Map( "AK" -> "Alaska", "AL" -> "Alabama", "AZ" -> "Arizona")// states: Map[String, String] = Map(// "AK" -> "Alaska",// "AL" -> "Alabama",// "AZ" -> "Arizona"// )for (k, v) <- states do println(s"key: $k, value: $v")// key: AK, value: Alaska// key: AL, value: Alabama// key: AZ, value: Arizona
Существует много способов работы с ключами и значениями на Map
.
Общие методы Map
включают foreach
, map
, keys
и values
.
В Scala есть много других специализированных типов Map
,
включая CollisionProofHashMap
, HashMap
, LinkedHashMap
, ListMap
, SortedMap
, TreeMap
, WeakHashMap
и другие.
Ссылки: