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 и другие.


Ссылки: