F # - Setler
F # 'daki bir küme, öğelerin eklendiği sırayı korumadan bir öğe koleksiyonu işlevi gören bir veri yapısıdır. Kümeler, yinelenen girdilerin koleksiyona eklenmesine izin vermez.
Setler Oluşturma
Setler aşağıdaki şekillerde oluşturulabilir -
- Set.empty kullanarak boş bir küme oluşturarak ve add işlevini kullanarak öğeler ekleyerek.
- Sıraları ve listeleri setlere dönüştürme.
Aşağıdaki program teknikleri göstermektedir -
(* 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
Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -
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]
Setlerde Temel İşlemler
Aşağıdaki tablo setler üzerindeki temel işlemleri göstermektedir -
Değer | Açıklama |
---|---|
ekle: 'T → Ayarla <' T> → Ayarla <'T> | Kümeye eklenen bir elemanın bulunduğu yeni bir küme döndürür. Küme zaten verilen öğeyi içeriyorsa istisna oluşmaz. |
içerir: 'T → Set <' T> → bool | Değerlendirir true verilen öğe verilen kümede ise. |
sayı: <'T> → int ayarla | Kümedeki öğe sayısını döndürür. |
fark: <'T> → Ayarla <' T> → Ayarla <'T> | İkinci kümenin elemanlarının ilk kümeden kaldırıldığı yeni bir küme döndürür. |
boş: <'T> olarak ayarlayın | Belirtilen tür için boş küme. |
var: ('T → bool) → <' T> → bool ayarla | Koleksiyonun herhangi bir öğesinin verilen yüklemi karşılayıp karşılamadığını test eder. Girdi işlevi yüklem ise ve öğeler i0 ... iN ise, bu işlev i0 veya ... yüklemini veya iN yüklemini hesaplar. |
filtre: ('T → bool) → <' T> ayarla → <'T> ayarla | Yalnızca verilen yüklemin döndürdüğü koleksiyonun öğelerini içeren yeni bir koleksiyon döndürür true. |
katlama: ('Durum →' T → 'Durum) →' Durum → Ayarla <'T> →' Durum | Verilen biriktirme işlevini kümenin tüm öğelerine uygular. |
foldBack: ('T →' Durum → 'Durum) → <' T> → 'Durum →' Durum Ayarla | Verilen biriktirme işlevini kümenin tüm öğelerine uygular. |
forall: ('T → bool) → <' T> → bool ayarla | Koleksiyonun tüm öğelerinin verilen koşulu karşılayıp karşılamadığını test eder. Giriş fonksiyonu p ise ve elemanlar i0 ... iN ise, bu fonksiyon p i0 && ... && p iN'yi hesaplar. |
kesişme: <'T> → Ayarla <' T> → Ayarla <'T> | İki kümenin kesişimini hesaplar. |
intersectMany: seq <Ayarla <'T >> → Ayarla <' T> | Bir dizi kümenin kesişimini hesaplar. Sıra boş olmamalıdır. |
isEmpty: <'T> → bool'u ayarlayın | İadeler true set boşsa. |
isProperSubset: <'T> → Ayarla <' T> → bool | Değerlendirir true birinci kümenin tüm öğeleri ikinci kümede ise ve ikincinin en az bir öğesi birinci kümede değilse. |
isProperSuperset: <'T> → Ayarla <' T> → bool | Değerlendirir true ikinci kümenin tüm öğeleri birinci kümede ise ve birinci kümenin en az bir öğesi ikinci kümede değilse. |
isSubset: <'T> → Ayarla <' T> → bool | Değerlendirir true ilk kümenin tüm öğeleri ikinci kümede ise. |
isSuperset: <'T> → Ayarla <' T> → bool | Değerlendirir true ikinci kümenin tüm öğeleri birinci kümede ise. |
iter: ('T → birim) → <' T> → birimi ayarla | Karşılaştırma işlevine göre verilen işlevi kümenin her öğesine uygular. |
harita: ('T →' U) → <'T> ayarla → <' U> ayarla | Girdi kümesinin her bir öğesine verilen işlevi uygulamanın sonuçlarını içeren yeni bir koleksiyon döndürür. |
maxElement: <'T> →' T'yi ayarlayın | Küme için kullanılan sıralamaya göre kümedeki en yüksek elemanı döndürür. |
minElement: <'T> →' T'yi ayarlayın | Küme için kullanılan sıralamaya göre kümedeki en düşük öğeyi döndürür. |
ofArray: 'T dizisi → <' T> ayarla | Verilen diziyle aynı öğeleri içeren bir küme oluşturur. |
ofList: 'T listesi → <' T> ayarla | Verilen listeyle aynı öğeleri içeren bir küme oluşturur. |
ofSeq: seq <'T> → <' T> ayarla | Verilen numaralandırılabilir nesneden yeni bir koleksiyon oluşturur. |
bölüm: ('T → bool) → <' T> → Ayarla <'T> * Ayarla <' T> | Kümeyi, verilen yüklemin sırasıyla doğru ve yanlış döndürdüğü öğeleri içeren iki kümeye böler. |
kaldır: 'T → Ayarla <' T> → Ayarla <'T> | Verilen öğenin kaldırıldığı yeni bir küme döndürür. Küme verilen elemanı içermiyorsa istisna oluşmaz. |
singleton: 'T → <' T> ayarla | Verilen öğeyi içeren küme. |
toArray: <'T> →' T dizisini ayarla | Sırayla kümenin öğelerini içeren bir dizi oluşturur. |
toList: <'T> →' T listesini ayarla | Sırayla kümenin öğelerini içeren bir liste oluşturur. |
toSeq: <'T> → seq <' T> ayarlayın | Koleksiyonun sıralı bir görünümünü numaralandırılabilir nesne olarak döndürür. |
birleşim: <'T> → Ayarla <' T> → Ayarla <'T> | İki kümenin birleşimini hesaplar. |
unionMany: seq <<'T >> → Ayarla <' T> | Bir dizi kümenin birleşimini hesaplar. |
Aşağıdaki örnek, yukarıdaki işlevlerden bazılarının kullanımlarını göstermektedir -
Misal
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""
Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -
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