Phương thức .Items và .Keys của Scripting.Dictionary (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

khongnhienttt

Thành viên hoạt động
Tham gia
15/7/15
Bài viết
137
Được thích
33
- Theo tìm hiểu bài viêt Tổng quan về Scripting.Dictionary của bạn Kyo, thì mình thấy có một chỗ không hiểu là:
Mã:
- Phương thức Items: Phương thức Items sẽ trả về giá trị mảng một chiều mà phần tử đầu tiên là phần tử 0 (dù cho bạn có sử dụng Option Base 1). 
PHP Code:MyArray = MyDictionary.Items 
MsgBox Join(MyArray, ";")  
- Phương thức Keys: Phương thức Keys sẽ trả về giá trị mảng một chiều mà phần tử đầu tiên là phần tử 0 (dù cho bạn có sử dụng Option Base 1). 
PHP Code:MyArray = MyDictionary.Keys 
MsgBox Join(MyArray, ";")

- mình thử làm thí nghiệm sau vì cho rằng keys và items đều là mảng 1 chiều:
Mã:
Sub testdic()
    Dim i As Integer
    With CreateObject("Scripting.Dictionary")
        For i = 1 To 10
            .Add "Key " & i, "item " & i
        Next i
        MsgBox Join(.keys, vbNewLine)
        MsgBox Join(.items, vbNewLine)
        MsgBox .keys(1)
        MsgBox .items(0)
    End With
End Sub
- Mong các bạn và các anh chị giải đáp giúp ạ
 
- Theo tìm hiểu bài viêt Tổng quan về Scripting.Dictionary của bạn Kyo, thì mình thấy có một chỗ không hiểu là:
Mã:
- Phương thức Items: Phương thức Items sẽ trả về giá trị mảng một chiều mà phần tử đầu tiên là phần tử 0 (dù cho bạn có sử dụng Option Base 1). 
PHP Code:MyArray = MyDictionary.Items 
MsgBox Join(MyArray, ";")  
- Phương thức Keys: Phương thức Keys sẽ trả về giá trị mảng một chiều mà phần tử đầu tiên là phần tử 0 (dù cho bạn có sử dụng Option Base 1). 
PHP Code:MyArray = MyDictionary.Keys 
MsgBox Join(MyArray, ";")

- mình thử làm thí nghiệm sau vì cho rằng keys và items đều là mảng 1 chiều:
Mã:
Sub testdic()
    Dim i As Integer
    With CreateObject("Scripting.Dictionary")
        For i = 1 To 10
            .Add "Key " & i, "item " & i
        Next i
        MsgBox Join(.keys, vbNewLine)
        MsgBox Join(.items, vbNewLine)
        MsgBox .keys(1)
        MsgBox .items(0)
    End With
End Sub
- Mong các bạn và các anh chị giải đáp giúp ạ
Thì cứ tạm hiểu kiểu nông dân như mình 1 cái coi sao
Bạn sít 1 cái Đít nhét hết chúng vô 1 cái thùng (trong đó có key và item) xong thích cái nào thì gắp cái đó ra xài ... đơn giản phải hông ... suy nghĩ chi cho mệt
 
Upvote 0
Bạn cần giải đáp cái gì? Code của bạn không chạy? chạy ra sai? hay bạn cho rằng lý luận mảng 1 chiều không đúng?

Lưu ý: gọi Items và Keys là thuộc tính thì đúng hơn theo tinh thần hướng đối tượng.
 
Upvote 0
Chắc như vầy bạn ạ
Mã:
Sub testdic()
    Dim i As Integer
    With CreateObject("Scripting.Dictionary")
        For i = 1 To 10
            .Add "Key " & i, "item " & i
        Next i
        MsgBox Join(.keys, vbNewLine)
        MsgBox Join(.Items, vbNewLine)
[COLOR=#ff0000]        arr1 = .keys[/COLOR]
        MsgBox arr1(1)
[COLOR=#ff0000]        arr2 = .Items[/COLOR]
        MsgBox arr2(0)
    End With
End Sub
 
Upvote 0
có người nhắc mới để ý , keys , items là các thuộc tính chỉ đọc , không phải phương thức , hi hi
bài #1 chắc sửa vầy cho ngắn

Mã:
Sub testdic()
    Dim i As Integer
    With CreateObject("Scripting.Dictionary")
        For i = 1 To 10
            .Add "Key " & i, "item " & i
        Next i
        MsgBox Join(.keys, vbNewLine)
        MsgBox Join(.items, vbNewLine)
        MsgBox .keys()(1)
        MsgBox .items()(0)
    End With
End Sub
 
Upvote 0
có người nhắc mới để ý , keys , items là các thuộc tính chỉ đọc , không phải phương thức , hi hi
bài #1 chắc sửa vầy cho ngắn

Mã:
Sub testdic()
    Dim i As Integer
    With CreateObject("Scripting.Dictionary")
        For i = 1 To 10
            .Add "Key " & i, "item " & i
        Next i
        MsgBox Join(.keys, vbNewLine)
        MsgBox Join(.items, vbNewLine)
        MsgBox .keys()(1)
        MsgBox .items()(0)
    End With
End Sub
Cám ơn bạn đã thông não cho mình, đúng là mình thắc mắc cái đó, nhưng không ngờ nó lại gọi ở ngoài như thế, cám ơn bạn rất nhiều
 
Upvote 0
...
Lưu ý: gọi Items và Keys là thuộc tính thì đúng hơn theo tinh thần hướng đối tượng.

Đính chính:
Xin lỗi tôi nhầm. Keys và Items là hàm (methods) chứ không phải thuộc tính (properties).
Vì là hàm cho nên lúc gọi nó phải có cặp dấu ngoặc. Tức là Keys() hoặc Items(). Hai hàm này trả về mảng một chiều.
Trong code bài #4, bạn có thể viết
arr1 = .Keys
Do hàm Keys trar về mảng 1 chiều và gán thẳng vào arr1, VBA cho phép hiểu ngầm dấu ngoặc trong trường hợp đơn giản, không sợ hiểu lầm.
Trong code bài #5, bạn không thể ép hiểu ngầm dấu ngoặc vì ở đây bạn cũng đồng thời dùng toán tử dấu ngoặc để truy cập phần tử của mảng theo chỉ số.
Msgbox .Keys(1) sẽ được VBA hiểu là bạn muốn nạp tham số 1 cho hàm Keys
Vì vậy, trường hợp này phải viết rõ ràng
Msgbox .Keys()(1) ---> phần thử thứ 2 (chỉ số 1) của mảng được trả về từ hàm Keys()

Chú thích: VB bắt nguồn từ ngôn ngữ thời thượng, dùng dấu ngoặc để diễn tả danh sách tham số hàm, và đồng thời cũng dùng dấu ngoặc cho toán tử truy cập phần tử mảng theo chỉ số cho nên dễ xảy ra lộn xộn.
Các ngôn ngữ mới hơn dùng dấu ngoặc vuông [] để làm toán tử truy cập phần tử mảng theo chỉ số.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom