Dictionary

Euler

Administrator
Thành viên BQT
1. Dictionary là gì?
2. Cách sử dụng Dictionary
2.1 Tạo từ điển, giá trị khởi tạo ban đầu, thêm, phương pháp tham chiếu
2.2 Phương phương tham chiếu bằng cách dùng For Each
2.3 Phương pháp xóa bằng Remove
2.4 Phương pháp xác nhận tính tồn tại Exists
3. Phương pháp sắp xếp key trong Dictionary
4. Phương pháp thiết định Object Dictionary
5. Tổng kết

1. Dictionary là gì?
Đối tượng Dictionary là đối tượng lưu trữ data và key. Hiểu ngắn gọn nó như một cuốn từ điển chứa dữ liệu và tra cứu bằng key.
Key là tồn tại duy nhất, không thể có hai key trùng nhau. Tra cứu key để tìm ra data (Item).
2. Cách sử dụng Dictionary
PropertyNội dung
CountThuộc tính Count sẽ trả về giá trị số lượng item có trong Dictionary. Nếu không có item trong Dic, thuộc tính này sẽ trả về giá trị 0.
Item(key)Thuộc tính Item giúp truy xuất giá trị Item ứng với key đó
Key(i)Truy xuất giá trị của Key ứng với số thứ tự.
CompareModeCách phân biệt sự khác nhau giữa các key: Phân biệt chữ in hoa hoặc không quan tâm in hoa hay in thường
vbBinaryCompare(0): Phân biệt in hoa và in thường
vbBinaryCompare(1): Không phân biệt in hoa hay in thường
Phương thức:

MethodNội dung
Add key, itemPhương thức Add dùng để thêm key, item vào Dictionary.
Exists(key)Phương thức Exists sẽ kiểm tra xem Key đã tồn tại trong từ điển chưa? Nếu Key tồn tại, kết quả sẽ là True và chưa tồn tại thì kết quả sẽ là False.
ItemsTrả về kết quả là mảng một chiều. Chỉ mục bắt đầu từ 0. Chú ý thuộc tính không có "s", phương thức thì có "s".
KeysTrả về kết quả là mảng một chiều. Chỉ mục bắt đầu từ 0. Chú ý thuộc tính không có "s", phương thức thì có "s".
Remove keyxóa key và dữ liệu liên quan tới key khỏi từ điển
RemoveAllXóa toàn bộ key và dữ liệu trong Dictionary nhưng không xóa chính nó.
2.1 Tạo từ điển, giá trị khởi tạo ban đầu, thêm, phương pháp tham chiếu
Để tạo Dictionary ta sử dụng hàm CreateObject:
Mã:
Dim Dic as Object
Set Dic = CreateObject("Scripting.Dictionary")
Ví dụ như sau:
Mã:
Sub tuhocvba()
    'Khai báo và tạo Dictionary
    Dim myDic As Object
    Set myDic = CreateObject("Scripting.Dictionary")

    'Thêm dữ liệu và key cho Dictionary, tạo giá trị khởi tạo
    'Dùng phương thức Add key, item
    myDic.Add "orange", 100
    myDic.Add "apple", 200
    myDic.Add "melon", 300

    'Tham chiếu Dictionary
    Dim str As String, i As Integer
    Dim Keys() As Variant
    Keys = myDic.Keys
    For i = 0 To 2
        str = str & Keys(i) & " : " & myDic.Item(Keys(i)) & vbCrLf
    Next i

    MsgBox str, vbInformation
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

Bạn cần đăng nhập để thấy hình ảnh

2.2 Phương phương tham chiếu bằng cách dùng For Each
Mã:
Sub macro2()
    'Tạo Dictionary
    Dim myDic As Object
    Set myDic = CreateObject("Scripting.Dictionary")
 
    'Khởi tạo giá trị ban đầu choDictionary, thêm dữ liệu cho từ điển
    myDic.Add "orange", 100
    myDic.Add "apple", 200
    myDic.Add "melon", 300
 
    'Tham chiếu tới Dictionary
    Dim str As String
    For Each Var In myDic
        str = str & Var & " : " & myDic.Item(Var) & vbCrLf
    Next Var
 
    MsgBox str, vbInformation
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

Bạn cần đăng nhập để thấy hình ảnh

2.3 Phương pháp xóa bằng Remove
Mã:
Sub macro3()
    'Tạo Dictionary
    Dim myDic As Object
    Set myDic = CreateObject("Scripting.Dictionary")
 
    'Khởi tạo giá trị và thêm phần tử choDictionary
    myDic.Add "orange", 100
    myDic.Add "apple", 200
    myDic.Add "melon", 300
 
    'Xóa key trong Dictonary
    myDic.Remove "orange"
 
    'Tham chiếu tới Dictionary
    Dim str As String
    For Each Var In myDic
        str = str & Var & " : " & myDic.Item(Var) & vbCrLf
    Next Var
 
    MsgBox str, vbInformation
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

Bạn cần đăng nhập để thấy hình ảnh


Chú ý rằng, phương thức xóa key này chỉ đúng khi key có tồn tại trong từ điển. Nếu key không tồn tại mà thực hiện lệnh xóa thì chương trình sẽ báo lỗi.
Giả sử chương trình trên ta sửa lại là:
Mã:
    myDic.Remove "orange2"
kết quả là:
Bạn cần đăng nhập để thấy hình ảnh

2.4 Phương pháp xác nhận tính tồn tại Exists
Đây là một tính năng chính của Dictionary dùng để kiểm tra key đã tồn tại trong từ điển hay chưa.
Do đặc tính tồn tại duy nhất của key, đặc tính này được vận dụng triệt để trong việc so sánh hai data.
Mã:
Sub macro4()
   'Tạo Dictionary
    Dim myDic As Object
    Set myDic = CreateObject("Scripting.Dictionary")
 
    'Thêm phần tử và nạp giá trị cho Dictionary
    myDic.Add "orange", 100
    myDic.Add "apple", 200
    myDic.Add "melon", 300
 
    'Xóa key trong Dictonary
    Dim key As String
    key = "orange"
    If myDic.Exists(key) Then 'Xác nhận tồn tại hay chưa, nếu tồn tại thì xóa
        myDic.Remove key
    Else
        MsgBox key & "Can not delete", vbInformation
    End If
 
    'Tham chiếu tới Dictionary
    Dim str As String
    For Each Var In myDic
        str = str & Var & " : " & myDic.Item(Var) & vbCrLf
    Next Var
 
    MsgBox str, vbInformation
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

3. Phương pháp sắp xếp key trong Dictionary
Dictionary không cung cấp phương thức để sắp xếp lại thứ tự các phần tử trong từ điển.
Tuy nhiên ta có thể tự sắp xếp lại từ điển. Trong đó ta sử dụng phương thức Sort đối với Range.
Mã:
Sub macro5()
    'Tạo Dictionary
    Dim myDic As Object
    Set myDic = CreateObject("Scripting.Dictionary")
 
    'Nạp key và dữ liệu cho Dictionary
    myDic.Add "orange", 100
    myDic.Add "apple", 200
    myDic.Add "melon", 300
 
    'Ghi dữ liệu Dictionary vào cells
    Dim i As Integer
    i = 1
    For Each Var In myDic
        Cells(i, 1).Value = Var
        Cells(i, 2).Value = myDic.Item(Var)
        i = i + 1
    Next Var
 
    'Sort trên Range
    Dim myrange As range
    Set myrange = range("A1:B" & myDic.Count)
    myrange.Sort key1:=range("A1")
 
    'Từ kết quả Sort ta đặt lại từ điển
    Dim str As String
    Dim Keys() As Variant, Items() As Variant
    Keys = myDic.Keys
    Items = myDic.Items
    For i = 1 To myDic.Count
        Keys(i - 1) = Cells(i, 1).Value 'Đặt lại gia trị key
        Items(i - 1) = Cells(i, 2).Value 'Đặt lại giá trị Item
        str = str & Keys(i - 1) & " : " & Items(i - 1) & vbCrLf
    Next i
 
    MsgBox str, vbInformation
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

Bạn cần đăng nhập để thấy hình ảnh

4. Phương pháp thiết định Object Dictionary
Vào Tools -> References và lựa chọn Microsoft Scripting Runtime từ trên danh sách để cài đặt -> nhấn OK.
Bạn cần đăng nhập để thấy hình ảnh

Khi đó code sẽ giản lược hơn trong việc tạo Dictionary
Mã:
Sub macro6()
    'Tạo Dictionary-rất ngắn gọn
    Dim myDic As New Scripting.Dictionary
 
    'Khởi tạo giá trị-thêm phần tử cho Dictionary
    myDic.Add "orange", 100
    myDic.Add "apple", 200
    myDic.Add "melon", 300
 
    'Tham chiếu tới Dictionary
    Dim str As String
    For Each Var In myDic
        str = str & Var & " : " & myDic.Item(Var) & vbCrLf
    Next Var
 
    MsgBox str, vbInformation
End Sub
Kết quả:
Bạn cần đăng nhập để thấy hình ảnh

5. Tổng kết:
- Có thể thêm vào số lượng item tùy ý với những kiểu dữ liệu khác nhau.
- Các item và key của Dictionary rất dễ truy xuất, sửa chữa và bổ sung.
- Dictionary cho phép bạn xóa tất cả các item tồn tại trong Dic mà không cần phải phá hủy chính nó.
- Và cuối cùng, các item chỉ có thể được gọi duy nhất bằng cách là thông qua một key mà key đó là bắt buộc và là duy nhất (không thể có 2 key trùng nhau). Điều này tạo thuận lợi cho các bài toán trích lọc danh sách duy nhất hoặc trong bài toán so sánh hai data, và đây cũng chính là ưu điểm lớn nhất của Dictionary.
Nguồn:
Mã:
https://www.sejuku.net/blog/29736
 

tuhocvba

Administrator
Thành viên BQT
Tuy dài như vậy, nhưng tựu chung lại với người code thì chỉ quan tâm tới: thêm mới phần tử vào dic, truy xuất key, truy xuất item, kiểm tra tồn tại.
Vì vậy tổng kết trong đoạn code sau:
‘==============================================
Mã:
‘Lay thong tin item, key trong Dictionary
‘==============================================
Sub Dictionary_thvba()

    Dim dic As New Dictionary
    Dim i As Integer
    Dim keytemp As string
   
    dic.Add "key_1", "item_1"
    dic.Add "key_2", "item_2"
    dic.Add "key_3", "item_3"

    ‘————————————————
    ‘Lay thong tin Item tu Index
    ‘————————————————
    For i = 0 To dic.Count – 1

        Debug.Print dic.Items(i)

    Next i

    ‘————————————————
    ‘Lay thong tin key tu Index
    ‘————————————————
    For i = 0 To dic.Count – 1

        Debug.Print dic.Keys(i)

    Next i

    ‘————————————————
    ‘Lay thong tin item tu key (var)
    ‘————————————————
    Dim Var As Variant

    For Each Var In dic

        Debug.Print Var & “,” & dic.Item(Var) 'liệt kê ghi key,item

    Next Var
    ‘————————————————
    ‘Kiem tra key ton tai hay khong?
    ‘————————————————
     keytemp = "key_1"
     if dic.Exists(keytemp) then Msgbox "co ton tai"  'kiểm tra key có tồn tại trong dic hay không
End Sub
 
Top