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:
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:
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:
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.