MCTS Programming

www.SarafMoghadam.Com

MCTS Programming

www.SarafMoghadam.Com

متغیرهای Dictionaries

نوعی متغیر است که به اعضای آن میتوان کلید اختصاص داد و انواع مختلفی دارد:


  • Hashtable ( قابل بازیابی از طریق نام و ایندکس )
  • SortedList ( به صورت اتوماتیک بر اساس کلیدها مرتب میشود )
  • StringDictionary (نوعی هش تیبل که قدرت زیادی برای رشته های حرفی دارد)
  • ListDictionary ( بهینه سازی شده برای کمتر از 10 آیتم )
  • HybridDictionary (از لیست دیکشنری استفاده می کند و در صورت افزایش هش تیبل میشود)
  • NameValueCollection ( بازیابی توسط اسم و ایندکس )

'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 میتوانیم چندین کلید یکی داشته باشیم

آرایه ای از بیت ها BitArray و BitVector32

لینک کمکی به 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())

متغیر صف Queue و پشته Stack

در Queue برای ریختن اطلاعات از Enqueue و برای گرفتن دریافت اطلاعات از Dequeue استفاده میشود. Peek نیز برای گرفتن اطلاعات بدون از بیرون کشیدن آن از صف است.
'Queue: First In First Out

Imports System.Collections

Dim q As New Queue()
q.Enqueue("Hello")
q.Enqueue("world")
q.Enqueue("just testing")
MsgBox("Queue demonstration:")
For i As Integer = 1 To 3
     ListBox1.Items.Add(q.Dequeue().ToString())
Next
خروجی در لیست باکس به ترتیب زیر خواهد بود:
Hello
world
just testing

در Stack برای ریختن اطلاعات از Push و برای گرفتن دریافت اطلاعات از Pop استفاده میشود. Peek نیز برای گرفتن اطلاعات بدون از بیرون کشیدن آن از پشته است.

'Stack: First In Last Out


Imports System.Collections
Dim s As New Stack()
s.Push("Hello")
s.Push("world")
s.Push("just testing")
MsgBox("Stack demonstration:")
For i As Integer = 1 To 3
ListBox1.Items.Add(s.Pop().ToString())
Next

خروجی در لیست باکس به ترتیب زیر خواهد بود:
just testing
world
Hello

استفاده از لیست آرایه ArrayList

توسعه دهندگان (همون برنامه نویسان خودمون) اغلب نیاز دارند تا گروهی از شیء های مرتبط با هم را ذخیره کنند.

مثل ساختن یک دفتر تلفن و یا دفتر پست الکترونیکی که در آن نیاز دارید که هم عکس و هم متن و شاید هم صدای ذخیره شده طرف را ذخیره کنید.

در دات نت فضایی (NAMESPACE) ای به نام System.Collections وجود دارد که انواع مختلف داده را پشتیبانی میکند


دسته اول از این نوع داده ها عبارتند از:

  •  ArrayList
  • Queue
  • Stack
  • StringCollection
  • BitArray

Imports System.Collections


Imports System.IO ' For use FileStream


Dim al As New ArrayList()

al.Add("Hello")
al.Add("World")
al.Add(5)
al.Add(New FileStream("delemete", FileMode.Create))
MsgBox("The array has " & al.Count.ToString & " items:")
For Each s As Object In al
     ListBox1.Items.Add(s.ToString())
Next


نمونه دیگر برای ArrayList  و استفاده از دستورات Insert و Remove و Sort در آن


Dim al As New ArrayList()
al.Add("Hello")
al.Add("World")
al.Add("this")
al.Add("is")
al.Add("a")
al.Add("test")
al.Remove("test")
al.Insert(4, "not")
al.Sort()
For Each s As Object In al
     ListBox1.Items.Add(s.ToString())
Next

خروجی:
A
Hello
is
not
this
World

ادامه مطلب ...

برنامه درخواستی استاد


استاد این کافیه؟



برای دیدن عکس بزرگ کلیک کنید


نوشتن کمرنگشم دارم کار میکنم

فعلا حتما باید روی هارد ذخیره کنه

بعد بخونه اگر در MemoryStream بریزه بهتره. حالا ببینیم دوستان دارن چه راهی میرن

من برای چرخاندن تصویر از

PictureBox2.Image.RotateFlip(RotateFlipType.Rotate180FlipX)

استفاده کرده ام و برای کمرنگ کردن تصویر از تابع زیر

 Private Function Lighter(ByVal imgLight As Image, ByVal level As Integer, ByVal nRed As Integer, ByVal nGreen As Integer, ByVal nBlue As Integer) As Image
        Dim graphics_1 As Graphics = Graphics.FromImage(imgLight)

        Dim pLight As New Pen(Color.FromArgb(210, nRed, nGreen, nBlue), imgLight.Width * 2)

        graphics_1.DrawLine(pLight, -1, -1, imgLight.Width, imgLight.Height)

        graphics_1.Save()

        graphics_1.Dispose()

        Return imgLight

    End Function

موقع صدا زدن برنامه هم از دستور زیر

  PictureBox2.Image = Lighter(PictureBox2.Image, System.Math.Max(System.Threading.Interlocked.Increment(80), 80 - 1), colToFadeTo.R, colToFadeTo.G, colToFadeTo.B)

انشاءااله در همین پست سورسش را میگزاریم

برنامه به این صورت هست که هم اسلاید شو داره و هم از شاخه کنار فایل exe به نام pictures با Getfiles همه عکس ها را در ListBox میریزد و با زدن ردیف های ListBox عکس و سایه آن عوض میشود و در موقع پخش اسلاید شو هم اگر ردیفی انتخاب شود از بقیه آن حرکت میکند و هر موقع دلمان خواست رنگ پشت زمینه را عوض میکنیم

روی عکس هم یک واترمارک شماره ردیف Listbox و نام عکس را می اندازد