English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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)
O Map do Scala possui três operações básicas:
Método | Descrição |
---|---|
keys | Retorna todos os keys (key) do Map |
values | Retorna todos os valores (value) do Map |
isEmpty | Retorna true quando o Map está vazio |
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
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)
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
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
A tabela a seguir lista os métodos comuns do Scala Map:
Número de série | Mé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