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