|
HashSet(T) مع قدوم الفيجوال بيسك دوت نت 2005 رأينا ظهور ما يسمى بال Generics و التي تضمنت كمثال List(Of T) و Queue<(Of <(T>)>) ، Stack<(Of <(T>)>) ، Dictionary<(Of <(TKey, TValue>)>) ، SortedList<(Of <(TKey, TValue>)>) ... و العديد من ال Collections ، اليوم سوف اقدم لكم نوع جديد و الموجود فقط في ال NET FrameWork 3.5 هذه ال Collecition الجديد هي ال HashSet(T). ال HashSet(T) هي عبارة عن Collection تقدم كفاءة عالية ولا تحتوي على Elements مكررة و ال Elements فيها لا تكون بترتيب معين بمعنى لن تستطيع عمل Sort عليها لذا فاذا كنت تهتم بعمل Sort أو اضافة Elements مكررة دون اهتماماك بالكفاءة فأنصحك باستعمال ال List(T) و التي تحتوي على خاصية Sort. عدم تكرار ال Elements (مثال): هذا مثال على عدم قبول ال HashSet(T) أي Element مكرر : لنفرض لدينا Class اسمه Student : Public Class Student Public First_Name As String Public Last_Name As String Public Age As Integer Public Adress As String End Class · ملحوظة : هنا قمت باستعمال متغيرات من نوع Public فقط كمثال ولا ينصح بعملها في برامجكم بل ينصح باستعمال ال Properties. الآن لدينا هذا الكلاس سوف نقوم بانشاء 3 نسخ منه ووضعها في ال HashSet(T) Dim FirstSt As New Student Dim SecondSt As New Student Dim LastSt As New Student With FirstSt .Adress = "SomeWhere" .Age = 15 .First_Name = "LOLO" .Last_Name = "PPP" End With With SecondSt .Adress = "AnyWhere" .Age = 20 .First_Name = "AAA" .Last_Name = "PPP" End With With LastSt .Adress = "NoWhere" .Age = 11 .First_Name = "LO" .Last_Name = "ddff" End With قمنا الآن بانشاء 3 طلبة الآن نضيفهم الى ال HashSet(T) Dim StudentCollection As New HashSet(Of Student) StudentCollection.Add(FirstSt) StudentCollection.Add(SecondSt) StudentCollection.Add(LastSt) قمنا بانشاء ال HashSet(T) و ثم اضفنا اليها الطلبة ، الى الآن كل الامور عادية، لقمن بكتابة هذا السطر : Console.Write(StudentCollection.Count) ستكون النتيجة 3 لأن ال HashSet يحتوي على ثلاث Elements دعونا نعدل نضيف Elements أخرى الى ال HashSet(T) StudentCollection.Add(LastSt) StudentCollection.Add(LastSt) StudentCollection.Add(LastSt) StudentCollection.Add(SecondSt) StudentCollection.Add(FirstSt) StudentCollection.Add(FirstSt) StudentCollection.Add(SecondSt) كما ترون أضفنا 7 Elements جديدة لكن كما تلاحظون هي نفسها التي أضفناها أول مرة، دعونا الآن نكتب السطر التالي : Console.Write(StudentCollection.Count) الآن ما هي النتيجة المنتظرة ؟ 3 + 7 أي 10 نعم هذا صحيح لو كنا نستخدم Collection أخرى ك List(T) لكن في ال HashSet(T) اضافة Element موجود مسبقا يلاقي التجاهل لذا النتيجة ستكون 3 و ليس 10. ال HashSet(T) تقدم خصائص رياضية جديدة و منها : UnionWith هذه العملية تقوم بجمع ال HashSet(T) الحالية مع ال HashSet(T) المحددة و طبعا تكون النتيجة في ال HashSet(T) الحالية : مثال : سنقوم بإنشاء HashSet(T) تحتوي على الأرقام من 1 الى 5 و HashSet(T) ثانية تحتوي على الأرقام من 6 الى 10 : Dim FirstHashSet As New HashSet(Of Integer) Dim SecondHashSet As New HashSet(Of Integer) For i As Integer = 1 To 5 FirstHashSet.Add(i) SecondHashSet.Add(i + 5) Next قمنا كما ترون باعلان ال HashSets الأول و الثاني و التي حددنا انهما ستسقبلان Integer ثم عملنا ملأناهما الأولى من 1 الى 5 و الثانية من 6 الى 10 FirstHashSet.UnionWith(SecondHashSet) هذا السطر كما ترون يقوم بعمل Union بين ال HashSet(T) الأول و الثاني و النتيجة تكون في ال HashSet(T) الحالي أي FirstHashSet. لعرض النتيجة يكفي كتابة هذا الكود : For Each I As Integer In FirstHashSet Console.Write(" {0}", I) Next والنتيجة ستكون 1 2 3 4 5 6 7 8 9 10 IntersectWith تقوم بتعديل ال HashSet(T) الحالي ليحتوي فقط على ال Elements التي توجد في ال HashSet(T) الحلي و ال HashSet(T) المحدد . مثال : سنحتفظ بنفس الكود الخاص بالمثال الأول و نعدل فقط على كود ملأ ال HashSets ليصبح : For i As Integer = 1 To 5 FirstHashSet.Add(i) SecondHashSet.Add(i * 2) Next محتوى ال FirstHashSet : 1 2 3 4 5 محتوى ال SecondHashSet : 2 4 6 8 10 الآن نعدل السطر التالي : FirstHashSet.UnionWith(SecondHashSet) الى FirstHashSet.IntersectWith(SecondHashSet) والنتيجة ستكون : 2 4 لأن هذين الرقمين هما الموجودين في كلا ال HashSets ExceptWith هذه الخاصية تقوم بحذف جميع ال Elements الموجودة في ال HashSet(T) المحددة من ال HashSet(T) الحالية : مثال : لنحتفظ بنفس كود خاصية IntersectWith و نعدل السطر التالي : FirstHashSet.IntersectWith(SecondHashSet) الى : FirstHashSet.ExceptWith(SecondHashSet) و النتيجة ستكون : 1 3 5 أي تم حذف 2 و 4 لأنها موجودة في ال SecondHashSet. SymmetricExceptWith هذه الخاصية عكس خاصية Union حيث أنها تعدل ال HashSet(T) الحالية لتحتوي على ال Elements الموجودة سواءا في ال HashSet(T) الحالة أو المحددة لكن ليس فيهما معا : نحتفظ بنفس الكود السابق و نعدل فقط السطر : FirstHashSet.ExceptWith(SecondHashSet) الى : FirstHashSet.SymmetricExceptWith(SecondHashSet) و النتيجة ستكون : 1 8 3 6 5 10 Add as favourites (36) | Quote this article on your site | Views: 633 | E-mail
Only registered users can write comments. Please login or register. Powered by AkoComment Tweaked Special Edition v.1.4.6 AkoComment © Copyright 2004 by Arthur Konze - www.mamboportal.com All right reserved |