10. Mappings (Dicionários)
Não é incorreto afirmar que mappings são como dicionários de outras linguagens pois também se armazena dados utilizando uma estrutura de chave-valor. Você verá eu usar as duas palavras nesse tutorial.
# Criando um dicionário
Assim como todas as outras variáveis em solidity nós primeiros definimos o tipo do dicionário e depois seu nome. No nosso exemplo, temos um dicionário em que as chaves são endereços e os valores são números inteiros que representam os saldos e o mapping se chama balances.
.8457c31f.png)
# Adicionando dados
Diferente das listas onde indicamos o nome e a posição, com dicionários indicamos o nome e a chave. Nesse caso abaixo, dicionario balances no endereço de quem chamar a transação (msg.sender) terá o valor 100 guardado.
.023793eb.png)
# Ler dados
Também muito parecido com listas mas ao invés de passar a posição-da-lista onde estão os dados, passamos a chave que nesse caso também é aquele que chamar a transação.
.8bcb42c2.png)
# Atualizar dados
Praticamente a mesma coisa que adicionar um novo dado, se no dicionário não existir nada no endereço de chave passado será adicionado pela primeira vez, se já existir algo será então substituído.
.e5b15c7b.png)
# Deletar dados
Esse sim é exatamente como em listas, basta passar a chave do dicionário após a instrução delete.
.5e8328f8.png)
# Valor padrão
Listas e Dicionários tem um valor padrão caso tentemos acessar uma chave ou posição-de-lista que não exista, esse valor é 0.
.dfa7ec39.png)
# Dicionário de dicionários
É possível armazenar outros dicionários dentro de um dicionário. Imagine que você constrói um contrato em que é possível que outras pessoas guardem dinheiro e disponibilizem para outras pessoas além delas mesmas. Essa situação é representada no nosso exemplo abaixo onde temos um dicionario de endereços (chaves) principais (que guardam dinheiro no contrato) e os valores dentro desses endereços há outra lista de endereços que são chaves e dentro dessas chaves há valores bool, que podem ser positivo ou negativo.
Resumidamente, temos uma lista de endereços que guarda outros endereços e valors true ou false para indicar se esses endereços podem ou não realizar uma determinada ação.
.358f248d.png)
# Listas dentro de dicionários
Se estivermos construindo um jogo onde cada jogador pode jogar várias partidas e armazenar sua pontuação de cada partida para no final realizar um cálculo.
Nesse caso, pode haver um dicionário que guarda endereços como chave e dentro de cada endereço há uma lista de valores.
.1fef7c43.png)