
H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 11: S d ng m ng và t pươ ử ụ ả ậ
h pợ
Ch ng ươ 11:
S d ng m ng và t p h p (Collection)ử ụ ả ậ ợ
--------oOo--------
N i dung th o lu n:ộ ả ậ
- T ch c thông tin d li u có chi u dài c đ nh và m ng đ ngổ ứ ữ ệ ề ố ị ả ộ
- D tr m ng d li u khi đ nh nghĩa l i kích th c m ngự ữ ả ữ ệ ị ạ ướ ả
- X lý t p h p các đ i t ng đi u khi n trên formử ậ ợ ố ượ ề ể
- S d ng vòng l p ử ụ ặ For Each…Next đ duy t qua danh sách t p h p các đ iể ệ ậ ợ ố
t ngượ
- T o t p h p c a riêng b n đ qu n lý d li u chu iạ ậ ợ ủ ạ ể ả ữ ệ ỗ
Khi ch ng trình tr nên l n và l ng thông tin và d ươ ở ớ ượ ữ li u l n, b n không th ch dùngệ ớ ạ ể ỉ
bi n mà còn c n đ n m t công c l u tr , x lý t t h n đó là m ng. M ng ch a danhế ầ ế ộ ụ ư ữ ử ố ơ ả ả ứ
sách tu n t các ph n t cùng đ nh d ng.ầ ự ầ ử ị ạ
Chúng ta cũng có th nhóm các đ i t ng vào thành t p h p đ d qu n lý, dùng vòngể ố ượ ậ ợ ể ễ ả
l p For each…Next đ duy t qua các ph n t c a t p h p.ặ ể ệ ầ ử ủ ậ ợ
Các tính năng m i trong VB.NET:ớ
- M ng có ch s c s là 0ả ỉ ố ơ ở
- Hàm Lbound luôn tr v 0 là gi i h n th p nh t c a m ng. Hàm ả ề ớ ạ ấ ấ ủ ả Ubound trả
v gi i h n trên c a m ng. S ph n t c a m ng là ề ớ ạ ủ ả ố ầ ử ủ ả Ubound()-1
- VB.NET dùng l p ớSystem.Collections đ x lý t p h pể ử ậ ợ
- B n có th ch a các đi u khi n trong m ng n u m ng c a b n khai báo ki uạ ể ứ ề ể ả ế ả ủ ạ ể
Object
1. Làm vi c v i m ng các bi nệ ớ ả ế
M ng giúp qu n lý các d li u l n h t s c d dàng. Vi c truy c p các ph n t c aả ả ữ ệ ớ ế ứ ễ ệ ậ ầ ử ủ
m ng thông qua ch s .ả ỉ ố
1.1. T o m ngạ ả
Vi c khai báo m ng t ng t nh khai báo bi n. ệ ả ươ ự ư ế Vi c khai báo th ng ch a các thôngệ ườ ứ
tin nh :ư
- Tên m ng: Tên đ i di n cho m ng, vi c truy c p m t ph n t m ng g m tênả ạ ệ ả ệ ậ ộ ầ ử ả ồ
m ng và ch s m ng.ả ỉ ố ả
- Ki u d li u: T t c các ph n t trong m ng ph i có cùng ki u.ể ữ ệ ấ ả ầ ử ả ả ể
- Kích th c m ng: Là s chi u c a m ng.ướ ả ố ề ủ ả
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 1 - Add: cnt-44-dh,
VIMARU

H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 11: S d ng m ng và t pươ ử ụ ả ậ
h pợ
- S ph n t c a m ng: S ph n t t i đa c a m ngố ầ ử ủ ả ố ầ ử ố ủ ả
1.2. Khai báo m ng c đ nhả ố ị
Cú pháp chung khai báo m ng có kích th c là:ả ướ
Dim ArrayName(Dim1Index, Dim2Index) As DataType
Trong đó:
- ArrayName: tên m ngả
- Dim1Index và Dim2Index: là hai chi u c a m ngề ủ ả
- Datatype: ki u d li u c a m ng. Khi ch a xác đ nh ki u c th , có th dùngể ữ ệ ủ ả ư ị ể ụ ể ể
ki u Object.ể
Ví d :ụ
Khai báo Dim Employee(4) As String khai báo m ng m t chi u ch a 5 ph n t có tênả ộ ề ứ ầ ử
là Employee có ki u String.ể
B n cũng có th khai báo m ng m t cách toàn c c trong module b ng t khóa Publicạ ể ả ộ ụ ằ ừ
nh sau: ưPublic Employee(4) As String.
M ng m t chi u có d ng:ả ộ ề ạ
Đ khai báo m ng hai chi u mang tên ScoreBoard b n có th khai báo nh sau:ể ả ề ạ ể ư
Dim ScoreBoard(1, 4) As Short
M ng này g m 2*5 = 10 ph n t t ng ng v i 10 ô vuông g m hai dòng và 5 c tả ồ ầ ử ươ ứ ớ ồ ộ đánh
s t 0.ố ừ
1.3. Làm vi c v i các ph n t trong m ngệ ớ ầ ử ả
Sau khi khai báo, b n có th s d ng m ng. Vi c truy c p vào m t ph n t c a m ngạ ể ử ụ ả ệ ậ ộ ầ ử ủ ả
nh tên m ng và ch s c a m ng đ t trong ngo c đ n, ch s là s nguyênờ ả ỉ ố ủ ả ặ ặ ơ ỉ ố ố , là bi nế
nguyên hay bi u th c có giá tr . Đ duy t qua t t c các ph n t trong m ng, dùng vòngể ứ ị ể ệ ấ ả ầ ử ả
l p For…Next. Ví d :ặ ụ
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 2 - Add: cnt-44-dh,
VIMARU
Employee
0
1
2
3
4

H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 11: S d ng m ng và t pươ ử ụ ả ậ
h pợ
employee(3) = "Thanh Van"
Phát bi u trên gán cho ph n t có ch s th 3 (t i ô th 4) tên là “Thanh Van”.ể ầ ử ỉ ố ứ ạ ứ
ScoreBoard(0, 2) = 12
Phát bi u trên gán cho ph n t dòng 0, c t 2 giá tr là 12.ể ầ ử ở ộ ị
1.4. T o và s d ng m ng có kích th c c đ nhạ ử ụ ả ướ ố ị
Bây gi ta t o ví d ờ ạ ụ MyFixedArray s d ng m ng m t chi u có tên ử ụ ả ộ ề nhietdo đ ghi l iể ạ
giá tr nhi t đ cao th p hàng ngày trong tu n. M ng này đ c khai báo đ u form vàị ệ ộ ấ ầ ả ượ ở ầ
đ c gán giá tr b ng hàm ượ ị ằ InputBox nh vòng l p For…Next. Toàn b n i dung c aờ ặ ộ ộ ủ
m ng sau đó l i đ c hi n th l i vào m t textbox cũng nh vòng l p For…Next.ả ạ ượ ể ị ạ ộ ờ ặ
Thi t k giao di n:ế ế ệ
T o m i m t gi i pháp và thêm vào m t d án có cùng tên là MyFixedArray. ạ ớ ộ ả ộ ự Thi t kế ế
giao di n nh hình:ệ ư
Trong đó: nút button1 có text là “Đi n nhi t đ ”, button2 là “Hi n th nhi t đ ”, button3ề ệ ộ ể ị ệ ộ
là “Thoát”.
Vi t mã:ế
Tr c h t ta khai báo m ng ướ ế ả nhietdo ngay d i dòng ở ướ Public Class Form1 nh sau:ư
Dim nhietdo(6) As Single
Khai báo nh th này nghĩa là t t c các th t c, các hàm đ u có th s d ng m ngư ế ấ ả ủ ụ ề ể ử ụ ả
này.
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 3 - Add: cnt-44-dh,
VIMARU

H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 11: S d ng m ng và t pươ ử ụ ả ậ
h pợ
Ti p theo ta t o ra s ki n nh p vào các giá tr nhi t đ trong tu n b ng cách t o thế ạ ự ệ ậ ị ệ ộ ầ ằ ạ ủ
t c ụButton1_Click và nh p mã nh sau:ậ ư
Private Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim Prompt, tieude As String
Dim i As Short
Prompt = "Đi n vào nhi t đ c a ngày."ề ệ ộ ủ
For i = 0 To UBound(nhietdo)
tieude = "Ngày " & (i + 1)
nhietdo(i) = CInt(InputBox(Prompt, tieude))
Next
End Sub
Trong đó, hàm Ubound(nhietdo) là hàm l y v ch s trên c a m ng ấ ề ỉ ố ủ ả nhietdo, trong
tr ng h p này là 6.ườ ợ
Sau đó ta cho hi n th các giá tr nhi t đ trong b y ngày trong tu n cũng nh giá trể ị ị ệ ộ ả ầ ư ị
nhi t đ trung bình b ng th t c ệ ộ ằ ủ ụ Button2_Click khi ng i dùng click vào nút “Hi n thườ ể ị
nhi t đ ” nh sau:ệ ộ ư
Private Sub Button2_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Dim ketqua As String
Dim i As Short
Dim tong As Single = 0
ketqua = "Nhi t đ c a tu n: "ệ ộ ủ ầ & vbCrLf & vbCrLf
For i = 0 To UBound(nhietdo)
ketqua = ketqua & "Ngày " & (i + 1) & _
vbTab & nhietdo(i) & vbCrLf
tong = tong + nhietdo(i)
Next
ketqua = ketqua & vbCrLf & _
"Nhi t đ trung bình: "ệ ộ & _
Format(tong / 7, "0.0")
TextBox1.Text = ketqua
End Sub
Th t c này l i s d ng vòng l p For…Next đ duy t l i các ph n t trong m ng sauủ ụ ạ ử ụ ặ ể ệ ạ ầ ử ả
khi đã đ c gán giá tr th t c button1_Click. ượ ị ở ủ ụ Bi n ếketqua đ c dùng đ làm chu iượ ể ỗ
k t xu t g p các giá tr ph n t m ng. Sau m i l n g p ta s d ng h ng s ế ấ ộ ị ầ ử ả ỗ ầ ộ ử ụ ằ ố vbCrLf để
khi n d u ng t dòng và d u v đ u dòng (t ng đ ng v i hai hàm ế ấ ắ ấ ề ầ ươ ươ ớ Chr(13) và
Chr(10)). H ng ằvbTab đ phân cách gi a ph n ghi ngày và ghi nhi t đ .ể ữ ầ ệ ộ
B n t o th th c Button3_Click và nh p phát bi u End đ k t thúc ch ng trình.ạ ạ ủ ụ ậ ể ể ế ươ
Ch y ch ng trình:ạ ươ
B n ch y ch ng trình và nh p đ giá tr nhi t đ 7 ngày r i cho hi n th giá tr đó lênạ ạ ươ ậ ủ ị ệ ộ ồ ể ị ị
xem sao.
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 4 - Add: cnt-44-dh,
VIMARU

H ng d n l p trình VB.NET ướ ẫ ậ Ch ng 11: S d ng m ng và t pươ ử ụ ả ậ
h pợ
1.5. T o m ng đ ngạ ả ộ
Vi c dùng m ng là r t thu n ti n. Tuy nhiên khi b n ch a bi t chính xác s ph n tệ ả ấ ậ ệ ạ ư ế ố ầ ử
c a m ng là bao nhiêu thì sao? Ví d khi b n mu n đ ng i dùng nh p vào bao nhiêuủ ả ụ ạ ố ể ườ ậ
nhi t đ tùy thích, nh p càng nhi u thì đ chính xác càng cao.ệ ộ ậ ề ộ
VB gi i quy t vi c này b ng m ng đ ng. ả ế ệ ằ ả ộ Kích th c m ng đ ng ch đ c ch đ nh khiướ ả ộ ỉ ượ ỉ ị
ch ng trình th c thi ch không đ nh trong lúc vi t mã. Vi c khai báo tr c kích th cươ ự ứ ị ế ệ ướ ướ
m ng là không c n thi t nh ng cũng c n dành ch tr c cho m ng đó.ả ầ ế ư ầ ỗ ướ ả
Các b c t o m ng đ ng:ướ ạ ả ộ
- Ch đ nh tên và ki u cho m ng khi thi t k form, ví d ỉ ị ể ả ế ế ụ Dim nhietdo() As
Single
- Thêm mã xác đ nh kích th c m ng khi ch ng trình th c thi. Ví d khiị ướ ả ươ ự ụ
ch ng trình ch y b n h i xem ng i dùng mu n nh p bao nhiêu ngàyươ ạ ạ ỏ ườ ố ậ , ví d :ụ
Dim songay As Integer
songay = InputBox("Ban muon nhap bao nhieu ngay?", "Tao mang dong")
- Dùng bi n songay đ đ nh l i kích th c m ng (tr đi 1 vì m ng tínhế ể ị ạ ướ ả ừ ả t 0). Víừ
d ụ
If songay > 0 Then ReDim nhietdo(songay - 1)
- Ti p theo ta dùng hàm Ubound(nhietdo) đ xác đ nh s ph n t c a m ng.ế ể ị ố ầ ử ủ ả
Bây gi chúng ta s làm l i ví d trên s d ng m ng đờ ẽ ạ ụ ử ụ ả ng:ộ
- Tr c h t, b n khai báo l i m ng đ ng và khai báo bi n songay ch a s ngàyướ ế ạ ạ ả ộ ế ứ ố
ng i dùng mu n nh p b ng đo n mã ngay d i dòng khai báo l p form1:ườ ố ậ ằ ạ ướ ớ
Dim nhietdo() As Single
Dim songay As Integer
- Sau đó s a l i mã c a th t c Button1_Click nh sau:ử ạ ủ ủ ụ ư
Dim Prompt, tieude As String
Dim i As Short
Prompt = "Đi n vào nhi t đ c a ngày."ề ệ ộ ủ
'Nhap so ngay muon ghi nhiet do
songay = InputBox("Ban muon nhap bao nhieu ngay?", "Tao mang
dong")
If songay > 0 Then ReDim nhietdo(songay - 1)
For i = 0 To UBound(nhietdo)
tieude = "Ngày " & (i + 1)
nhietdo(i) = CInt(InputBox(Prompt, tieude))
Next
- Ti p theo thay s 7 trong th t c Button2_Click b ng bi n ế ố ủ ụ ằ ế songay:
ketqua = ketqua & vbCrLf & _
"Nhi t đ trung bình: "ệ ộ & _
Biên so n: Ph m Đ c L p ạ ạ ứ ậ - 5 - Add: cnt-44-dh,
VIMARU

