F # - Set

Himpunan di F # adalah struktur data yang bertindak sebagai kumpulan item tanpa mempertahankan urutan penyisipan item. Set tidak mengizinkan entri duplikat dimasukkan ke dalam koleksi.

Membuat Set

Set dapat dibuat dengan cara berikut -

  • Dengan membuat satu set kosong menggunakan Set.empty dan menambahkan item menggunakan fungsi add.
  • Mengonversi urutan dan daftar menjadi kumpulan.

Program berikut mendemonstrasikan teknik -

(* 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

Ketika Anda mengkompilasi dan menjalankan program, itu menghasilkan output berikut -

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]

Operasi Dasar di Set

Tabel berikut menunjukkan operasi dasar pada set -

Nilai Deskripsi
tambahkan: 'T → Set <' T> → Set <'T> Mengembalikan set baru dengan elemen yang ditambahkan ke set. Tidak ada pengecualian dimunculkan jika set sudah berisi elemen yang diberikan.
berisi: 'T → Set <' T> → bool Mengevaluasi ke true jika elemen yang diberikan ada di set yang diberikan.
hitungan: Setel <'T> → int Mengembalikan jumlah elemen dalam set.
perbedaan: Set <'T> → Set <' T> → Set <'T> Mengembalikan set baru dengan elemen dari set kedua dihapus dari yang pertama.
kosong: Setel <'T> Himpunan kosong untuk tipe yang ditentukan.
ada: ('T → bool) → Set <' T> → bool Menguji apakah ada elemen koleksi yang memenuhi predikat yang diberikan. Jika fungsi input adalah predikat dan elemennya adalah i0 ... iN, maka fungsi ini menghitung predikat i0 atau ... atau predikat iN.
filter: ('T → bool) → Set <' T> → Set <'T> Mengembalikan koleksi baru yang hanya berisi elemen koleksi yang predikatnya dikembalikan true.
fold: ('State →' T → 'State) →' State → Set <'T> →' State Menerapkan fungsi akumulasi yang diberikan ke semua elemen himpunan.
foldBack: ('T →' State → 'State) → Set <' T> → 'State →' State Menerapkan fungsi akumulasi yang diberikan ke semua elemen himpunan.
forall: ('T → bool) → Set <' T> → bool Menguji apakah semua elemen koleksi memenuhi predikat yang diberikan. Jika fungsi inputnya adalah p dan elemennya adalah i0 ... iN, maka fungsi ini menghitung p i0 && ... && p iN.
intersect: Setel <'T> → Set <' T> → Set <'T> Menghitung perpotongan dua set.
intersectMany: seq <Set <'T >> → Set <' T> Menghitung perpotongan urutan set. Urutan tidak boleh kosong.
isEmpty: Setel <'T> → bool Kembali true jika set kosong.
isProperSubset: Set <'T> → Set <' T> → bool Mengevaluasi ke true jika semua elemen dari set pertama ada di set kedua, dan setidaknya satu elemen dari set kedua tidak di set pertama.
isProperSuperset: Setel <'T> → Set <' T> → bool Mengevaluasi ke true jika semua elemen dari himpunan kedua ada di set pertama, dan setidaknya satu elemen dari himpunan pertama tidak ada di set kedua.
isSubset: Setel <'T> → Set <' T> → bool Mengevaluasi ke true jika semua elemen dari set pertama ada di set kedua.
isSuperset: Setel <'T> → Set <' T> → bool Mengevaluasi ke true jika semua elemen dari set kedua ada di set pertama.
iter: ('T → unit) → Set <' T> → unit Menerapkan fungsi yang diberikan ke setiap elemen himpunan, dalam urutan sesuai dengan fungsi perbandingan.
peta: ('T →' U) → Set <'T> → Set <' U> Mengembalikan koleksi baru yang berisi hasil penerapan fungsi yang diberikan ke setiap elemen set input.
maxElement: Setel <'T> →' T Mengembalikan elemen tertinggi dalam himpunan sesuai dengan urutan yang digunakan untuk himpunan.
minElement: Setel <'T> →' T Mengembalikan elemen terendah dalam himpunan sesuai dengan urutan yang digunakan untuk himpunan.
ofArray: 'T array → Set <' T> Membuat set yang berisi elemen yang sama seperti array yang diberikan.
ofList: 'T list → Set <' T> Membuat set yang berisi elemen yang sama seperti daftar yang diberikan.
ofSeq: seq <'T> → Set <' T> Membuat koleksi baru dari objek enumerabel yang diberikan.
partisi: ('T → bool) → Set <' T> → Set <'T> * Set <' T> Membagi set menjadi dua set yang berisi elemen yang predikatnya masing-masing mengembalikan benar dan salah.
hapus: 'T → Set <' T> → Set <'T> Mengembalikan set baru dengan elemen yang diberikan dihapus. Tidak ada pengecualian dimunculkan jika set tidak berisi elemen yang diberikan.
singleton: 'T → Set <' T> Set yang berisi elemen yang diberikan.
toArray: Setel larik <'T> →' T. Membuat larik yang berisi elemen himpunan secara berurutan.
toList: Setel <'T> →' T list Membuat daftar yang berisi elemen himpunan secara berurutan.
toSeq: Setel <'T> → seq <' T> Mengembalikan tampilan terurut dari koleksi sebagai objek yang dapat dihitung.
union: Setel <'T> → Set <' T> → Set <'T> Menghitung gabungan dari dua set.
unionMany: seq <Set <'T >> → Set <' T> Menghitung penyatuan urutan set.

Contoh berikut menunjukkan penggunaan beberapa fungsi di atas -

Contoh

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

Ketika Anda mengkompilasi dan menjalankan program, itu menghasilkan output berikut -

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