برای استفاده از generic collections ممکن است که نیاز به رابط هایی داشته باشم
مانند Sort کردن ListArray که نیاز به IComparable دارد.
این مبحث را فردا کامل میکنم
ساخت کارت فروش فروشگاهی با استفاده از ArrayList
بعد از ساخت پروژه جدید و اضافه کردن یک Button و یک ListBox به فرم اصلی یک کلاس به نام ShoppingCartItem به صورت زیر درست میکنیم
Public Class ShoppingCartItem
Public itemName As String
Public price As Double
Public Sub New(ByVal _itemName As String, ByVal _price As Double)
Me.itemName = _itemName
Me.price = _price
End Sub
End Class
namespace زیر را به فرم اصلی برنامه اضافه میکنیم:
Imports System.Collections
در رویداد کلیک دکمه اضافه شده به فرم کد های زیر را مینویسم
Dim shoppingCart As New ArrayList()
shoppingCart.Add(New ShoppingCartItem("Car", 5000))
shoppingCart.Add(New ShoppingCartItem("Book", 30))
shoppingCart.Add(New ShoppingCartItem("Phone", 80))
shoppingCart.Add(New ShoppingCartItem("Computer", 1000))
For Each
sci As ShoppingCartItem In shoppingCart
Listbox1.Items.Add(sci.itemName & ": " & sci.price.ToString())
Next
خروجی به شکل زیر خواهد بود:
حالا برای مرتب کردن ( Sort ) هم باید از رابط (اینترفیس) IComparable استفاده کنیم، کلاس خود را به شکل زیر تبدیل میکنیم
Public Class ShoppingCartItem
Implements IComparable
Public itemName As String
Public price As Double
Public Sub New(ByVal _itemName As String, ByVal _price As Double)
Me.itemName = _itemName
Me.price = _price
End Sub
Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
Dim otherItem As ShoppingCartItem = DirectCast(obj, ShoppingCartItem)
Return Me.price.CompareTo(otherItem.price)
End Function
End Class
مرتب سازی بر اساس price است.
حال میتوانیم در برنامه اصلی آیتم های خود را از کوچک به بزرگ و یا بزرگ به گوچک مرتب کنیم
shoppingCart.Sort()
shoppingCart.Reverse()
نوعی متغیر است که به اعضای آن میتوان کلید اختصاص داد و انواع مختلفی دارد:
'SortedList
Dim sl As New SortedList()
sl.Add("1", "First")
sl.Add("3", "Second")
sl.Add("2", "Third")
For Each de As DictionaryEntry In sl
ListBox1.Items.Add(de.Value)
Next
Key کلید و Value مقدار یه خانه است.
خروجی را مرتب کرده و به صورت زیر به ListBox1 اضافه میکند
( مرتب سازی روی حروف الفبا نیز میباشد )
First
Third
Second
نحوه دستیابی به خانه های حافظه از نوع SortedList
MsgBox(sl("3"))
MsgBox(sl.GetByIndex(0))
'Hashtable
Dim HT As New Hashtable()
HT.Add("nima", "09118970987")
HT.Add("pouyan", "091234538")
HT.Add("shadi", "0913234566")
HT.Add("nansi", "0919789400")
For Each h As DictionaryEntry In HT
ListBox1.Items.Add(h.Key)
ListBox2.Items.Add(h.Value)
Next
هش تیبل فقط میتواند کلید منحصر به فرد داشته باشد
اگر بخواهیم که کلید، منحصر به فرد نباشد از نیم ولیو کالکشن استفاده میکنیم.
'NameValueCollection
Dim sl As New NameValueCollection()
sl.Add("Stack", "Represents a LIFO collection of objects.")
sl.Add("Stack", "A pile of pancakes.")
sl.Add("Queue", "Represents a FIFO collection of objects.")
sl.Add("Queue", "In England, a line.")
sl.Add("SortedList", "Represents a collection of key/value pairs.")
For Each s As String In sl.GetValues(0)
ListBox1.Items.Add(s)
Next
For Each s As String In sl.GetValues("Queue")
ListBox2.Items.Add(s)
Next
همانطور که میبینید در NameValueCollection میتوانیم چندین کلید یکی داشته باشیم
لینک کمکی به MSDN برای BitArray
آرایه بیتی ، آرایه ای از Boolean ها است
نحوه تعریف آرایه بیتی به روشهای مختلف عبارت است از:
Imports System
Imports System.Collections
Dim BA As New BitArray(5)
Dim myBA2 As New BitArray(5, False)
Dim myBytes() As Byte = {1, 2, 3, 4, 5}
Dim myBA3 As New BitArray(myBytes)
Dim myBools() As Boolean = {True, False, True, True, False}
Dim myBA4 As New BitArray(myBools)
Dim myInts() As Integer = {6, 7, 8, 9, 10}
Dim myBA5 As New BitArray(myInts)
نحوه خواندن اطلاعات تیز به صورت زیر است:
MsgBox(myBA.Item(2))
Count و Length نیز تعداد و طول رشته بیتی را برمیگرداند
MsgBox(BA.Count)
MsgBox(BA.Length)
لینک کمکی به MSDN برای BitVector32
ساختاری از آرایه از 0 و 1 ها که 32 از حافظه را میگیرد
Imports System.Collections.Specialized
'ساخت یک BitVector با تمام خانه های False
Dim myBV As New BitVector32(0)
Dim myBit2 As Integer = BitVector32.CreateMask(myBit1)
Dim myBit3 As Integer = BitVector32.CreateMask(myBit2)
Dim myBit4 As Integer = BitVector32.CreateMask(myBit3)
Dim myBit5 As Integer = BitVector32.CreateMask(myBit4)
'نحوه نمایش آنها
MsgBox(myBV.ToString())
myBV(myBit1) = True
MsgBox(myBV.ToString())
myBV(myBit3) = True
MsgBox(myBV.ToString())
myBV(myBit5) = True
MsgBox(myBV.ToString())