F # - Conjuntos

Un conjunto en F # es una estructura de datos que actúa como una colección de elementos sin preservar el orden en el que se insertan los elementos. Los conjuntos no permiten insertar entradas duplicadas en la colección.

Creando Conjuntos

Los conjuntos se pueden crear de las siguientes formas:

  • Creando un conjunto vacío usando Set.empty y agregando elementos usando la función agregar.
  • Conversión de secuencias y listas en conjuntos.

El siguiente programa demuestra las 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

Cuando compila y ejecuta el programa, produce el siguiente resultado:

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]

Operaciones básicas en conjuntos

La siguiente tabla muestra las operaciones básicas en conjuntos:

Valor Descripción
agregar: 'T → Establecer <' T> → Establecer <'T> Devuelve un nuevo conjunto con un elemento agregado al conjunto. No se genera ninguna excepción si el conjunto ya contiene el elemento dado.
contiene: 'T → Set <' T> → bool Evalúa a true si el elemento dado está en el conjunto dado.
count: Establecer <'T> → int Devuelve el número de elementos del conjunto.
diferencia: Establecer <'T> → Establecer <' T> → Establecer <'T> Devuelve un nuevo conjunto con los elementos del segundo conjunto eliminados del primero.
vacío: Establecer <'T> El conjunto vacío para el tipo especificado.
existe: ('T → bool) → Set <' T> → bool Comprueba si algún elemento de la colección satisface el predicado dado. Si la función de entrada es predicado y los elementos son i0 ... iN, entonces esta función calcula el predicado i0 o ... o el predicado iN.
filtro: ('T → bool) → Establecer <' T> → Establecer <'T> Devuelve una nueva colección que contiene solo los elementos de la colección para la que devuelve el predicado dado true.
fold: ('Estado →' T → 'Estado) →' Estado → Establecer <'T> →' Estado Aplica la función de acumulación dada a todos los elementos del conjunto.
foldBack: ('T →' State → 'State) → Set <' T> → 'State →' State Aplica la función de acumulación dada a todos los elementos del conjunto.
forall: ('T → bool) → Set <' T> → bool Comprueba si todos los elementos de la colección satisfacen el predicado dado. Si la función de entrada es p y los elementos son i0 ... iN, esta función calcula p i0 && ... && p iN.
intersección: Establecer <'T> → Establecer <' T> → Establecer <'T> Calcula la intersección de los dos conjuntos.
intersectMany: seq <Establecer <'T >> → Establecer <' T> Calcula la intersección de una secuencia de conjuntos. La secuencia no debe estar vacía.
isEmpty: Establecer <'T> → bool Devoluciones true si el conjunto está vacío.
isProperSubset: Establecer <'T> → Establecer <' T> → bool Evalúa a true si todos los elementos del primer conjunto están en el segundo y al menos un elemento del segundo no está en el primero.
isProperSuperset: Establecer <'T> → Establecer <' T> → bool Evalúa a true si todos los elementos del segundo conjunto están en el primero y al menos un elemento del primero no está en el segundo.
isSubconjunto: Establecer <'T> → Establecer <' T> → bool Evalúa a true si todos los elementos del primer conjunto están en el segundo.
isSuperset: Establecer <'T> → Establecer <' T> → bool Evalúa a true si todos los elementos del segundo conjunto están en el primero.
iter: ('T → unidad) → Establecer <' T> → unidad Aplica la función dada a cada elemento del conjunto, en orden según la función de comparación.
mapa: ('T →' U) → Establecer <'T> → Establecer <' U> Devuelve una nueva colección que contiene los resultados de aplicar la función dada a cada elemento del conjunto de entrada.
maxElement: Establecer <'T> →' T Devuelve el elemento más alto del conjunto de acuerdo con el orden que se utiliza para el conjunto.
minElement: Establecer <'T> →' T Devuelve el elemento más bajo del conjunto según el orden que se utilice para el conjunto.
ofArray: 'T array → Set <' T> Crea un conjunto que contiene los mismos elementos que la matriz dada.
ofList: 'T lista → Establecer <' T> Crea un conjunto que contiene los mismos elementos que la lista dada.
ofSeq: seq <'T> → Establecer <' T> Crea una nueva colección a partir del objeto enumerable dado.
partición: ('T → bool) → Establecer <' T> → Establecer <'T> * Establecer <' T> Divide el conjunto en dos conjuntos que contienen los elementos para los que el predicado dado devuelve verdadero y falso respectivamente.
eliminar: 'T → Establecer <' T> → Establecer <'T> Devuelve un nuevo conjunto con el elemento dado eliminado. No se genera ninguna excepción si el conjunto no contiene el elemento dado.
singleton: 'T → Establecer <' T> El conjunto que contiene el elemento dado.
toArray: Establecer <'T> →' T matriz Crea una matriz que contiene los elementos del conjunto en orden.
toList: Establecer <'T> →' T lista Crea una lista que contiene los elementos del conjunto en orden.
toSeq: Establecer <'T> → seq <' T> Devuelve una vista ordenada de la colección como un objeto enumerable.
unión: Establecer <'T> → Establecer <' T> → Establecer <'T> Calcula la unión de los dos conjuntos.
unionMany: seq <Establecer <'T >> → Establecer <' T> Calcula la unión de una secuencia de conjuntos.

El siguiente ejemplo demuestra los usos de algunas de las funcionalidades anteriores:

Ejemplo

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""

Cuando compila y ejecuta el programa, produce el siguiente resultado:

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