أخبار

 

تسجيل الدخول

أهلا, زائر. الرجاء الدخول أو التسجيل
أêنèن 07, 2008, 10:28:51
اسم المستخدم: كلمة المرور:
تسجيل الدخول باسم المستخدم، كلمة المرور و مدة الجلسة

هل نسيت كلمة المرور؟

من على الخط

We have 5 guests online

Syndicate

الإحصائيات

Members: 694
News: 194
Web Links: 3

مواضيع ذات صلة

آخر 10 أعضاء

mohloay
عذراء
feto
lord_s_man
mohamedhassan2008
found
sky_blue
الحجري
manchsteralex2000
eliventurr

إعلانات

Google
 
عالم الفيجوال بيسك دوت نت منتديات عالم الفيجوال بيسك دوت نت
جووجل
HashSet(T) PDF Print E-mail
User Rating: / 0
PoorBest 
Written by أيوب جمال الإدريسي   
انخهêس, 12 حزêراو 2008

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

Be first to comment this article
RSS comments

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

 
Next >
Advertisement

جميع حقوق الطبع محفوطة لموقع عالم الفيجوال بيسك دوت نت


hit counter