F # - Conjuntos

Um conjunto em F # é uma estrutura de dados que atua como uma coleção de itens sem preservar a ordem em que os itens são inseridos. Os conjuntos não permitem que entradas duplicadas sejam inseridas na coleção.

Criação de conjuntos

Os conjuntos podem ser criados das seguintes maneiras -

  • Criando um conjunto vazio usando Set.empty e adicionando itens usando a função add.
  • Converter sequências e listas em conjuntos.

O programa a seguir demonstra as técnicas -

(* creating sets *)
let set1 = Set.empty.Add(3).Add(5).Add(7). Add(9)
printfn"The new set: %A" set1

let weekdays = Set.ofList ["mon"; "tues"; "wed"; "thurs"; "fri"]
printfn "The list set: %A" weekdays

let set2 = Set.ofSeq [ 1 .. 2.. 10 ]
printfn "The sequence set: %A" set2

Quando você compila e executa o programa, ele produz a seguinte saída -

The new set: set [3; 5; 7; 9]
The list set: set ["fri"; "mon"; "thurs"; "tues"; "wed"]
The sequence set: set [1; 3; 5; 7; 9]

Operações básicas em conjuntos

A tabela a seguir mostra as operações básicas em conjuntos -

Valor Descrição
adicionar: 'T → Definir <' T> → Definir <'T> Retorna um novo conjunto com um elemento adicionado ao conjunto. Nenhuma exceção é levantada se o conjunto já contém o elemento fornecido.
contém: 'T → Set <' T> → bool Avalia para true se o elemento fornecido estiver no conjunto fornecido.
contagem: Definir <'T> → int Retorna o número de elementos do conjunto.
diferença: Definir <'T> → Definir <' T> → Definir <'T> Retorna um novo conjunto com os elementos do segundo conjunto removidos do primeiro.
vazio: Definir <'T> O conjunto vazio para o tipo especificado.
existe: ('T → bool) → Set <' T> → bool Testa se algum elemento da coleção satisfaz o predicado fornecido. Se a função de entrada for predicado e os elementos forem i0 ... iN, então essa função calcula o predicado i0 ou ... ou o predicado iN.
filtro: ('T → bool) → Definir <' T> → Definir <'T> Retorna uma nova coleção contendo apenas os elementos da coleção para os quais o predicado dado retorna true.
dobrar: ('Estado →' T → 'Estado) →' Estado → Definir <'T> →' Estado Aplica a função de acumulação fornecida a todos os elementos do conjunto.
foldBack: ('T →' Estado → 'Estado) → Definir <' T> → 'Estado →' Estado Aplica a função de acumulação fornecida a todos os elementos do conjunto.
forall: ('T → bool) → Set <' T> → bool Testa se todos os elementos da coleção satisfazem o predicado fornecido. Se a função de entrada for pe os elementos forem i0 ... iN, então essa função calcula p i0 && ... && p iN.
cruzar: Definir <'T> → Definir <' T> → Definir <'T> Calcula a interseção dos dois conjuntos.
intersectMany: seq <Set <'T >> → Set <' T> Calcula a interseção de uma sequência de conjuntos. A sequência não deve estar vazia.
isEmpty: Set <'T> → bool Devoluções true se o conjunto estiver vazio.
isProperSubset: Set <'T> → Set <' T> → bool Avalia para true se todos os elementos do primeiro conjunto estiverem no segundo e pelo menos um elemento do segundo não estiver no primeiro.
isProperSuperset: Set <'T> → Set <' T> → bool Avalia para true se todos os elementos do segundo conjunto estiverem no primeiro e pelo menos um elemento do primeiro não estiver no segundo.
isSubset: Set <'T> → Set <' T> → bool Avalia para true se todos os elementos do primeiro conjunto estiverem no segundo.
isSuperset: Set <'T> → Set <' T> → bool Avalia para true se todos os elementos do segundo conjunto estiverem no primeiro.
iter: ('T → unidade) → Definir <' T> → unidade Aplica a função dada a cada elemento do conjunto, na ordem de acordo com a função de comparação.
mapa: ('T →' U) → Definir <'T> → Definir <' U> Retorna uma nova coleção contendo os resultados da aplicação da função fornecida a cada elemento do conjunto de entrada.
maxElement: Definir <'T> →' T Retorna o elemento mais alto no conjunto de acordo com a ordem que está sendo usada para o conjunto.
minElement: Set <'T> →' T Retorna o elemento mais baixo no conjunto de acordo com a ordem que está sendo usada para o conjunto.
ofArray: 'array T → Set <' T> Cria um conjunto que contém os mesmos elementos da matriz fornecida.
ofList: 'T list → Set <' T> Cria um conjunto que contém os mesmos elementos da lista fornecida.
ofSeq: seq <'T> → Definir <' T> Cria uma nova coleção a partir do objeto enumerável fornecido.
partição: ('T → bool) → Definir <' T> → Definir <'T> * Definir <' T> Divide o conjunto em dois conjuntos contendo os elementos para os quais o predicado fornecido retorna verdadeiro e falso, respectivamente.
remover: 'T → Definir <' T> → Definir <'T> Retorna um novo conjunto com o elemento fornecido removido. Nenhuma exceção é levantada se o conjunto não contém o elemento fornecido.
singleton: 'T → Definir <' T> O conjunto que contém o elemento fornecido.
toArray: Definir <'T> →' T array Cria uma matriz que contém os elementos do conjunto em ordem.
toList: Definir <'T> →' T lista Cria uma lista que contém os elementos do conjunto em ordem.
toSeq: Definir <'T> → seq <' T> Retorna uma visão ordenada da coleção como um objeto enumerável.
união: Definir <'T> → Definir <' T> → Definir <'T> Calcula a união dos dois conjuntos.
unionMany: seq <Set <'T >> → Set <' T> Calcula a união de uma sequência de conjuntos.

O exemplo a seguir demonstra o uso de algumas das funcionalidades acima -

Exemplo

let a = Set.ofSeq [ 1 ..2.. 20 ]
let b = Set.ofSeq [ 1 ..3 .. 20 ]
let c = Set.intersect a b
let d = Set.union a b
let e = Set.difference a b

printfn "Set a: "
Set.iter (fun x -> printf "%O " x) a
printfn""

printfn "Set b: "
Set.iter (fun x -> printf "%O " x) b
printfn""

printfn "Set c = set intersect of a and b : "
Set.iter (fun x -> printf "%O " x) c
printfn""

printfn "Set d = set union of a and b : "
Set.iter (fun x -> printf "%O " x) d
printfn""

printfn "Set e = set difference of a and b : "
Set.iter (fun x -> printf "%O " x) e
printfn""

Quando você compila e executa o programa, ele produz a seguinte saída -

Set a:
1 3 5 7 9 11 13 15 17 19
Set b:
1 4 7 10 13 16 19
Set c = set intersect of a and b :
1 7 13 19
Set d = set union of a and b :
1 3 4 5 7 9 10 11 13 15 16 17 19
Set e = set difference of a and b :
3 5 9 11 15 17