Fsharp Sets Fsharp Sets Fsharp Sets Fsharp Sets
Sets در زبان #F
sets در #F یک ساختار داده است که به عنوان مجموعه ای از آیتم ها بدون حفظ ترتیبی که در آن آیتم ها وارد شده است عمل می کند. Sets اجازه نمی دهد ورودی های تکراری به مجموعه وارد شوند.
ایجاد Sets در زبان #F
Sets در زبان #F می توانند به روش های زیر ایجاد شوند:
- با ایجاد یک Set خالی با استفاده از empty و اضافه کردن آیتم ها با استفاده از add function.
- تبدیل توالی ها و لیست ها به Sets.
برنامه زیر تکنیک ها نشان می دهد.( ایجاد Sets در زبان #F )
1 2 3 4 5 6 7 8 9 | (* 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 |
خروجی
1 2 3 | 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] |
حال که ایجاد Sets در زبان #F رو می دونیم وارد مبحث بعدی یعنی عملیات پایه در Sets می شویم.
عملیات پایه در Sets در #F
جدول زیر عملیات اساسی در Sets را نشان می دهد.
مقدار | توضیحات |
<add : ‘T → Set<‘T> → Set<‘T | یک Set جدید را با یک عنصر اضافه شده به Set بازمی گرداند. بدون استثنا اگر Set قبلا شامل عنصر داده شده است اعلام می شود. |
contains : ‘T → Set<‘T> → bool | اگر عنصر داده شده در Set داده شده است، true ارزیابی می شود. |
count : Set<‘T> → int | تعداد عناصر موجود در Set را بر می گرداند. |
<difference : Set<‘T> → Set<‘T> → Set<‘T | یک Set جدید با عناصری از Set دوم که از اولی حذف شده را برمی گرداند. |
<empty : Set<‘T | Set خالی برای نوع مشخص شده. |
exists : (‘T → bool) → Set<‘T> → bool | تست این که هر عنصر از مجموعه منطبق بر پیش فرض داده شده است. اگر تابع ورودی پیش فرض و عناصر i0 … iN باشد، این تابع محاسبه می کند پیش فرض i0 یا … یا پیش فرض iN را. |
<filter : (‘T → bool) → Set<‘T> → Set<‘T | مجموعه جدیدی را که شامل تنها عناصری از مجموعه است را بازمی گرداند، برای این که پیش فرض داده شده true را برگرداند . |
fold : (‘State → ‘T → ‘State) → ‘State → Set<‘T> → ‘State | تابع accumulating داده شده را به تمام عناصر Set اعمال می کند. |
foldBack : (‘T → ‘State → ‘State) → Set<‘T> → ‘State → ‘State | تابع accumulating داده شده را به تمام عناصر Set اعمال می کند. |
forall : (‘T → bool) → Set<‘T> → bool | تست اینکه تمام عناصر مجموعه بر اساس پیش فرض داده شده است. اگر تابع ورودی p باشد و عناصر i0 … iN باشد، این تابع p i0 && … && p iN را محاسبه می کند. |
<intersect : Set<‘T> → Set<‘T> → Set<‘T | محل برخورد یا فصل مشترک دو Set را محاسبه می کند. |
<intersectMany : seq<Set<‘T>> → Set<‘T | تقاطع یک توالی sets را محاسبه می کند. دنباله باید خالی(non-empty) نباشد. |
isEmpty : Set<‘T> → bool | اگر Set خالی باشد، true می شود. |
isProperSubset : Set<‘T> → Set<‘T> → bool | اگر تمام عناصر set اول در set دوم هستند و حداقل یک عنصر از دومی در اولی نیست، true ارزیابی می شود. |
isProperSuperset : Set<‘T> → Set<‘T> → bool | اگر تمام عناصر set دوم در اولی هستند و حداقل یک عنصر از اولی در دومی نیست. true ارزیابی می شود. |
isSubset : Set<‘T> → Set<‘T> → bool | اگر تمام عناصر set اول در set دوم هستند .true ارزیابی می شود. |
isSuperset : Set<‘T> → Set<‘T> → bool | اگر تمام عناصر set دوم در اولی هستند. true ارزیابی می شود. |
iter : (‘T → unit) → Set<‘T> → unit | تابع داده شده به هر عنصر set اعمال می شود، به ترتیب با توجه به تابع مقایسه یا comparison . |
<map : (‘T → ‘U) → Set<‘T> → Set<‘U | یک مجموعه جدید را که شامل نتایج اعمال تابع داده شده به هر عنصری از set ورودی است، را بازمی گرداند. |
maxElement : Set<‘T> → ‘T | بالاترین عنصر در set را بر اساس دستورالعمل مورد استفاده برای set بر می گرداند. |
minElement : Set<‘T> → ‘T | کمترین عنصر در set را بر اساس دستورالعمل مورد استفاده برای set می گیرد. |
<ofArray : ‘T array → Set<‘T | set ی از مجموعه ای که حاوی عناصر مشابه به عنوان آرایه های داده می شود ایجاد می کند. |
<ofList : ‘T list → Set<‘T | یک set را ایجاد می کند که شامل عناصر مشابه به عنوان لیست داده شده است. |
<ofSeq : seq<‘T> → Set<‘T | یک مجموعه جدید از آبجکت قابل شمارش داده شده را ایجاد می کند. |
partition : (‘T → bool) → Set<‘T> → Set<‘T> * Set<‘T> | set را به دو set حاوی عناصر تقسیم می کند. برای این که پیش فرض داده شده به ترتیب true و false را برگرداند. |
<remove : ‘T → Set<‘T> → Set<‘T | یک set جدید را با عنصر مشخص شده ی حذف شده باز می گرداند. اگر set شامل عنصر داده شده نباشد، بدون استثنائی اعلام شده است. |
<singleton : ‘T → Set<‘T | set شامل عنصر داده شده است. |
toArray : Set<‘T> → ‘T array | آرایه ای را ایجاد می کند که شامل عناصری از set به ترتیب است. |
toList : Set<‘T> → ‘T list | لیستی را ایجاد می کند که شامل عناصر set به ترتیب است. |
<toSeq : Set<‘T> → seq<‘T | یک نمایش منظم مجموعه را به عنوان یک آبجکت قابل شمارش بازمی گرداند. |
<union : Set<‘T> → Set<‘T> → Set<‘T | union دو set را محاسبه می کند. |
<unionMany : seq<Set<‘T>> → Set<‘T | union یک set متوالی را محاسبه می کند. |
مثال
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 |
خروجی
1 2 3 4 5 6 7 8 9 10 | 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 |