Mapas F#

Um mapa F# é uma classe de objeto que armazena uma coleção de chaves e valores associados a uma chave.

Um mapa pode ser pensado como uma forma de armazenar e recuperar dados com base em um identificador único, algo semelhante aos dicionários em outras linguagens de programação.

Por padrão, o F# torna os mapas imutáveis, o que significa que depois que um mapa é criado, seu conteúdo nunca pode ser modificado depois de criado.

A operação em um mapa retorna um novo mapa que contém as alterações feitas em vez de retornar um mapa existente. Por causa disso, os mapas são ideais como parte da programação funcional, que é uma disciplina que valoriza muito a imutabilidade.

Discutiremos os fundamentos dos mapas em F# neste artigo, incluindo a criação, adição, remoção e consulta de elementos com base no mapa.



Criando mapas

Para criar um mapa, primeiro criamos um mapa vazio com Map.empty e depois adicionamos itens ao mapa usando a função Adicionar.

Usando o exemplo a seguir, demonstraremos como isso pode ser alcançado:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
let actors =
Map.empty. //Creating an empty Map
Add("Jennifer Aniston", "1969").
Add("Kevin Hart", "1979").
Add("Matt LeBlanc", "1967").
Add("Morgan Freeman", "1937").
Add("Samuel L. Jackson", "1948");;
printfn "Map – Actors: %A" actors
(* Convert a list to Map *)
let capitals =
[ "Canada", "Ottawa";
"United States", "Washington, D.C.";
"Chili", "Santiago";
"Barbados", "Bridgetown";
"Denmark", "Nuuk" ]
|> Map.ofList;;
printfn "Map capitals of USA : %A" capitals
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

E a saída será:

Map - Actors: map [(Jennifer Aniston, 1969); (Kevin Hart, 1979); (Matt LeBlanc, 1967); (Morgan Freeman, 1937); (Samuel L. Jackson, 1948)]
Map capitals of USA : map [(Barbados, Bridgetown); (Canada, Ottawa); (Chili, Santiago); (Denmark, Nuuk); (United States, Washington, D.C.)]

Ao usar a tecla, você poderá acessar elementos individuais dentro do mapa.

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let actors =
Map.empty. //Creating an empty Map
Add("Jennifer Aniston", "1969").
Add("Kevin Hart", "1979").
Add("Matt LeBlanc", "1967").
Add("Morgan Freeman", "1937").
Add("Samuel L. Jackson", "1948");;
printfn "Map – Actors: %A" actors
//Accessing an elements using key
printfn "\n%A" actors.["Morgan Freeman"]
printfn "%A" actors.["Kevin Hart"]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Os seguintes resultados de exemplo para acessar elementos individuais são os seguintes:
Map - Actors: map [(Jennifer Aniston, 1969); (Kevin Hart, 1979); (Matt LeBlanc, 1967); (Morgan Freeman, 1937); (Samuel L. Jackson, 1948)]

1937
1979

Operações básicas em mapas

Adicionar nome do módulo

Abaixo está uma tabela mostrando as operações básicas que você pode realizar em um mapa:

Membro Visão geral
Adicionar Nesta função , um novo mapa é criado adicionando a ligação ao mapa que é fornecido atualmente.
ContémChave O elemento é verificado para ver se faz parte do domínio do mapa.
Contar Conta quantos vínculos estão contidos no mapa.
Está vazia Este método retorna true se o mapa não contiver nenhuma ligação.
Item Encontre um elemento no mapa procurando-o. Quando não há vinculação no mapa, ele lança uma KeyNotFoundException .
Remover O elemento é removido do domínio do mapa. Na ausência do elemento, nenhuma exceção é levantada.
TryFind Se o elemento estiver no domínio do mapa, esse método retornará um valor Some . Caso contrário, ele retorna um valor None .

Algumas das funcionalidades acima são demonstradas no exemplo a seguir:

Example: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let actors =
Map.empty. //Creating an empty Map
Add("Jennifer Aniston", "1969").
Add("Kevin Hart", "1979").
Add("Matt LeBlanc", "1967").
Add("Morgan Freeman", "1937").
Add("Samuel L. Jackson", "1948");;
printfn "Map – Actors: %A" actors
(* finding the DOB of a Actors*)
let foundDob = actors.TryFind "Samuel L. Jackson"
match foundDob with
| Some x -> printfn "\nFound: %s" x
| None -> printfn "Did not find the specified value."
let remove = actors |> Map.remove "Matt LeBlanc"
printfn "\nUpdatedMap – Actors: %A" remove
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

A saída do seguinte resultado será a seguinte:

Map - Actors: map [(Jennifer Aniston, 1969); (Kevin Hart, 1979); (Matt LeBlanc, 1967); (Morgan Freeman, 1937); (Samuel L. Jackson, 1948)]

Found: 1948

UpdatedMap - Actors: map [(Jennifer Aniston, 1969); (Kevin Hart, 1979); (Morgan Freeman, 1937); (Samuel L. Jackson, 1948)]

Exemplo de Explicação

Esse código F# cria um mapa chamado atores com chaves de cadeia de caracteres que representam nomes de atores e valores de cadeia de caracteres que representam seu ano de nascimento. O mapa é criado começando com um mapa vazio usando a função Map.empty e, em seguida, usando o método Add para adicionar elementos a ele, um por um.

A função printfn imprime todo o mapa de atores no console.

Em seguida, o método TryFind é usado para pesquisar o ano de nascimento do ator “Samuel L. Jackson” no mapa dos atores . O método retorna um tipo de opção, que pode ser Some x se a chave for encontrada e seu valor for associado a x ou None se a chave não for encontrada. A expressão de correspondência é usada para corresponder ao padrão do resultado de TryFind e imprimir a mensagem correspondente no console.

Finalmente, a função Map.remove é usada para remover o elemento com a chave “Matt LeBlanc” do mapa de atores , e o mapa resultante é armazenado em uma nova variável chamada remove . A função printfn é usada novamente para imprimir todo o mapa de remoção no console.

No geral, esse código demonstra como criar um mapa F#, adicionar elementos a ele, pesquisar elementos usando TryFind , remover elementos usando Map.remove e imprimir o mapa inteiro no console.

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone