English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala Map (mapeamento)

Collections Scala

Map (mapeamento) é um conjunto iterável de pares chave-valor (key/estrutura de valor)。

Todos os valores podem ser obtidos através das chaves.

Todas as chaves no Map são únicas.

O Map também é chamado de tabela de hash (Hash tables).

O Map tem dois tipos, mutável e imutável, a diferença está na capacidade de modificar o objeto mutável, enquanto o objeto imutável não pode.

Pelo padrão, o Scala usa Map imutável. Se você precisar usar conjuntos mutáveis, você precisa explicitamente importar import scala.collection.mutable.Map Classe

No Scala, você pode usar tanto Map imutável quanto mutável, o imutável é diretamente Map, o mutável é mutable.Map. A seguir está um exemplo de uso do Map imutável:

// Tabela hash vazia, keys são strings, valores são inteiros
var A: Map[Char, Int] = Map()
// Demonstração de par de chave e valor do Map
val colors = Map("vermelho" -> #FF0000, "azul" -> #F0FFFF)

Quando se define um Map, é necessário definir o tipo do par de chave e valor. Se precisar adicionar uma chave-Pares de valor, que podem ser usados + Números, conforme mostrado a seguir:

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

Operações básicas do Map

O Map do Scala possui três operações básicas:

MétodoDescrição
keysRetorna todos os keys (key) do Map
valuesRetorna todos os valores (value) do Map
isEmptyRetorna true quando o Map está vazio

Exemplo online

A seguir, um exemplo demonstra o uso básico dos três métodos acima:

object Test {
   def main(args: Array[String]) {
      val colors = Map("vermelho" -> #FF0000,
                       "azul" -> #F0FFFF,
                       "peru" -> #CD853F)
      val nums: Map[Int, Int] = Map()
      println("Os keys em colors são : ") + colors.keys)
      println("Os valores em colors são : ") + colors.values)
      println("Verificação se colors está vazio : ") + colors.isEmpty())
      println("Verificação se nums está vazio : ") + nums.isEmpty())
   }
}

Executar o código acima, o resultado de output é:

$ scalac Test.scala 
$ scala Test
Os keys em colors são : Set(vermelho, azul, peru)
Os valores em colors são : MapLike(#FF0000, #F0FFFF, #CD853F)
Verificação se colors está vazio : false
Verificação se nums está vazio : true

Combinação de Map

Você pode usar ++ Operador ou Map.++() Método para conectar dois Map, quando os Map são combinados, os keys duplicados são removidos. A seguir está um exemplo de combinação de dois Map:

object Test {
   def main(args: Array[String]) {
      val cores1 = Map("vermelho" -> #FF0000,
                        "azul" -> #F0FFFF,
                        "peru" -> #CD853F)
      val cores2 = Map("azul" -> "#0033FF",
                        "amarelo" -> "#FFFF00",
                        "vermelho" -> "#FF0000")
      //  ++ como operador
      var cores = cores1 ++ cores2
      println( "cores1 ++ cores2 : " + cores )
      //  ++ como método
      cores = cores1.++(cores2)
      println( "cores1.++(cores2) : " + cores )
   }
}

Executar o código acima, o resultado de output é:

$ scalac Test.scala 
$ scala Test
cores1 ++ cores2 : Map(azul -> #0033FF, azul -> #F0FFFF, peru -> #CD853F, amarelo -> #FFFF00, vermelho -> #FF0000)
cores1.++(cores2) : Map(azul -> #0033FF, azul -> #F0FFFF, peru -> #CD853F, amarelo -> #FFFF00, vermelho -> #FF0000)

Saída de keys e values do Map

A seguir, saída de dados por meio de loop foreach para keys e values do Map:

object Test {
   def main(args: Array[String]) {
      val sites = Map("w3codebox" -> "http://pt.oldtoolbag.com",
                       "baidu" -> "http://www.baidu.com",
                       "taobao" -> "http://www.taobao.com")
      sites.keys.foreach{ i =>  
                           print( "Chave = " + i )
                           println(" Valor = " + sites(i) )}
   }
}

Executar o código acima, o resultado de output é:

$ scalac Test.scala 
$ scala Test
Chave = w3codebox Valor = http://pt.oldtoolbag.com
Chave = baidu Valor = http://www.baidu.com
Chave = taobao Valor = http://www.taobao.com

para verificar se uma chave específica existe no Map

Você pode usar Map.contains a seguir para verificar se uma chave específica existe no Map. Exemplo a seguir:

object Test {
   def main(args: Array[String]) {
      val sites = Map("w3codebox" -> "http://pt.oldtoolbag.com",
                       "baidu" -> "http://www.baidu.com",
                       "taobao" -> "http://www.taobao.com")
      if( sites.contains( "w3codebox" )){
           println("w3codebox 键存在,对应的值为 :")  + sites("w3codebox"))
      }
           println("w3codebox 键不存在")
      }
      if( sites.contains( "baidu" )){
           println("baidu 键存在,对应的值为 :")  + sites("baidu"))
      }
           println("baidu 键不存在")
      }
      if( sites.contains("google")){
           println("Chave google existe, o valor correspondente é ":  + sites("google"))
      }
           println("Chave google não existe")
      }
   }
}

Executar o código acima, o resultado de output é:

$ scalac Test.scala 
$ scala Test
w3Chave codebox existe, o valor correspondente é :http://pt.oldtoolbag.com
Chave baidu existe, o valor correspondente é :http://www.baidu.com
Chave google não existe

Métodos do Scala Map

A tabela a seguir lista os métodos comuns do Scala Map:

Número de sérieMétodo e descrição
1

def ++(xs: Map[(A, B)]): Map[A, B]

Retornar um novo Map, composto por novos Map xs

2

def -(elem1: A, elem2: A, elems: A*): Map[A, B]

Retornar um novo Map, removendo a chave elem1, elem2 ou outros elems.

3

def --(xs: GTO[A]): Map[A, B]

Retornar um novo Map, removendo o objeto xs correspondente  key

4

def get(key: A): Option[B]

Retornar o valor da chave especificada

5

def iterator: Iterator[(A, B)]

Criar um novo iterador e output key/value par

6

def addString(b: StringBuilder): StringBuilder

Adicionar todos os elementos da Map ao StringBuilder, pode adicionar delimitador

7

def addString(b: StringBuilder, sep: String): StringBuilder

Adicionar todos os elementos da Map ao StringBuilder, pode adicionar delimitador

8

def apply(key: A): B

Retornar o valor da chave especificada, se não existir, retornar o método padrão da Map

9

def clear(): Unit

Limpar Map

10

def clone(): Map[A, B]

Copiar de uma Map para outra Map

11

def contains(key: A): Boolean

Se a Map existir com a chave especificada, retorna true, caso contrário, retorna false.

12

def copyToArray(xs: Array[(A, B)]): Unit

Copia o conjunto para um array

13

def count(p: ((A, B)) => Boolean): Int

Calcula o número de elementos que atendem à condição especificada no conjunto

14

def default(key: A): B

Define o valor padrão do Map, que é retornado quando a chave não existe

15

def drop(n: Int): Map[A, B]

Retorna um novo conjunto descartando os primeiros 'n' elementos

16

def dropRight(n: Int): Map[A, B]

Retorna um novo conjunto descartando os últimos 'n' elementos

17

def dropWhile(p: ((A, B)) => Boolean): Map[A, B]

Descarta elementos à esquerda, até que a condição 'p' não seja mais verdadeira

18

def empty: Map[A, B]

Retorna um Map vazio do mesmo tipo

19

def equals(that: Any): Boolean

Se dois Map forem iguais (key/Se os valores 'value' forem iguais, retorna true, caso contrário, retorna false

20

def exists(p: ((A, B)) => Boolean): Boolean

Determina se existe um elemento que atenda à condição especificada no conjunto

21

def filter(p: ((A, B))=> Boolean): Map[A, B]

Retorna todos os conjuntos que atendem à condição especificada

22

def filterKeys(p: (A) => Boolean): Map[A, B]

Retorna um Map imutável que atende à condição especificada

23

def find(p: ((A, B)) => Boolean): Option[(A, B)]

Encontra o primeiro elemento que satisfez a condição especificada no conjunto

24

def foreach(f: ((A, B)) => Unit): Unit

Aplica a função em todos os elementos do conjunto

25

def init: Map[A, B]

Retorna todos os elementos, exceto o último

26

def isEmpty: Boolean

Verifica se o Map está vazio

27

def keys: Iterable[A]

Retorna todas as chaves/p>

28

def last: (A, B)

Retorna o último elemento

29

def max: (A, B)

Encontra o elemento maior

30

def min: (A, B)

Encontra o elemento mais pequeno

31

def mkString: String

Exibe todos os elementos do conjunto como strings

32

def product: (A, B)

Retorna o produto dos elementos numéricos do conjunto.

33

def remove(key: A): Option[B]

Remove a chave especificada

34

def retain(p: (A, B) => Boolean): Map.this.type

Se atender ao critério, retorna true

35

def size: Int

Retorna o número de elementos do Map

36

def sum: (A, B)

Retorna a soma de todos os elementos numéricos da coleção

37

def tail: Map[A, B]

Retorna todos os elementos de uma coleção exceto o primeiro

38

def take(n: Int): Map[A, B]

Retorna os n primeiros elementos

39

def takeRight(n: Int): Map[A, B]

Retorna os n últimos elementos

40

def takeWhile(p: ((A, B)) => Boolean): Map[A, B]

Retorna os elementos que atendem ao critério especificado

41

def toArray: Array[(A, B)]

Conversão de conjunto para array

42

def toBuffer[B >: A]: Buffer[B]

Retorna um buffer que contém todos os elementos do mapa

43

def toList: List[A]

Retorna uma lista que contém todos os elementos do mapa

44

def toSeq: Seq[A]

Retorna um seq que contém todos os elementos do mapa

45

def toSet: Set[A]

Retorna um conjunto que contém todos os elementos do mapa

46

def toString(): String

Retorna um objeto de string

Mais métodos podem ser consultados Documentação da API

Collections Scala