سلام درود خدمت همراهان همیشگی سایت پی وی لرن . با آموزش زبان برنامه نویسی #F همراهتون هستیم. دیدیم که توالی یا دنباله ها در اف شارپ، یک مجموعه مرتب شده از مقادیر را نشان می دهند. set ها نیز مجموعه ای از آیتم ها ولی بدون حفظ ترتیبی که در آن آیتم ها وارد شده باشد، هستند. در زبان اف شارپ روش هایی برای ایجاد set داریم. بنابراین در این قسمت از آموزش اف شارپ به بررسی Sets در زبان #F و ایجاد Sets در زبان #F می پردازیم و در پایان نیز جدول مربوط به عملیات پایه در Sets رو مورد بررسی قرار می دهیم.
sets در #F یک ساختار داده است که به عنوان مجموعه ای از آیتم ها بدون حفظ ترتیبی که در آن آیتم ها وارد شده است عمل می کند. Sets اجازه نمی دهد ورودی های تکراری به مجموعه وارد شوند.
Sets در زبان #F می توانند به روش های زیر ایجاد شوند:
برنامه زیر تکنیک ها نشان می دهد.( ایجاد 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 را نشان می دهد.
مقدار | توضیحات |
---|---|
<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 |
set ها برخلاف توالی یا دنباله ها که در جلسه قبل دیدیم، مجموعه ای از آیتم ها ولی بدون حفظ ترتیبی که در آن آیتم ها وارد شده باشد، می باشند. در این قسمت علاوه بر نحوه ایجاد Sets در زبان #F به بررسی مقادیر مختلف وارد شده در set مانند تقسیم set به دو set به وسیله <partition : (‘T → bool) → Set<‘T> → Set<‘T> * Set<‘T تا مقادیر true یا false رو برگرداند و خیلی مقادیر دیگری که قبلا بیان نمودیم بررسی شدند. در ادامه جلسات به مبحث Maps در اف شارپ خواهیم پرداخت. با ما همراه باشید.