befaint
|||||||||||||
- Tham gia
- 6/1/11
- Bài viết
- 14,499
- Được thích
- 19,668
Bài 17. SortedList
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
SortedList là một thư viện nằm trong “System.Collections” của .NET Framework.
SortedList lưu trữ các Items theo Keys tương ứng thành cặp, được sắp xếp theo các Keys, cho phép truy cập tới Item theo Key hoặc chỉ mục (index) ứng với Item đó.
Yêu cầu: Hệ thống phải cài đặt .NET Framework v1.1 trở lên.
Nội dung chính gồm:
#1
1. Khai báo SortedList
2. Các thuộc tính
2.1. Count
2.2. Capacity
2.3. Item
3. Các phương thức
3.1. Add
3.2. Clear
3.3. Clone
3.4. Contains / ContainsKey
#2
3.5. ContainsValue
3.6. GetByIndex
3.7. GetKey
3.8. GetKeyList
3.9. GetValueList
3.10. IndexOfKey
3.11. IndexOfValue
3.12. Remove
3.13. RemoveAt
3.14. SetByIndex
3.15. ToString
3.16. TrimToSize
#3
4. Ứng dụng
-----------------
1. Khai báo SortedList
1.1. Kiểu khai báo sớm
(Không có Tooltip khi gọi SortedList, phải thiết lập trong Tools/References)
- Trong cửa sổ VBA, Tools menu, References.
- Tìm và check vào mục “mscorlib.dll” trong cửa sổ References – VBAProject.
Khai báo trong code:
1.2. Kiểu khai báo muộn
(Không có Tooltip khi gọi SortedList, không cần thiết lập trong Tools/References).
Khai báo trong code:
2. Các thuộc tính
2.1. Count
Trả về số lượng phần tử (Items) thực sự tồn tại trong SortedList.
Ví dụ:
2.2. Capacity
Trả về số lượng các phần tử hoặc đặt (thiết lập) số lượng các phần tử mà SortedList có thể lưu trữ.
+ Các lỗi xảy ra đặt số lượng các phần tử cho SortedList:
- Khi giá trị của Capacity nhỏ hơn số lượng phần từ đã tồn tại trong SortedList (count).
- Khi giá trị của Capacity trả về SortedList có kích thước vượt dung lượng bộ nhớ có thể dùng của hệ thống (OutOfMemoryException).
+ Capacity luôn luôn lớn hơn hoặc bằng Count. Nếu Count vượt quá Capacity trong khi thêm các phần tử, Capacity sẽ tự động tăng lên bằng cách tái phân bổ lại mảng nội bộ trước khi sao chép các phần tử cũ và thêm các phần tử mới.
+ Có thể giảm Capacity bằng cách dùng phương thức TrimToSize hoặc bằng cách thiết lập giá trị Capacity cụ thể (nhưng phải đảm bảo >= Count, nếu không sẽ xảy ra lỗi). Khi giá trị của Capacity được xác định cụ thể, mảng nội bộ cũng được phân bổ lại để đáp ứng dung lượng đã xác định.
Ví dụ:
2.3. Item
Trả về giá trị của Item theo Key chỉ định trong SortedList, hoặc gán giá trị mới cho Item theo Key của Item đó.
- Nếu gán một giá trị cho một Item theo một Key chưa tồn tại trong SortedList thì SortedList tự động thêm Key đó, và Item đó có giá trị vừa đưa vào.
Ví dụ:
3. Các phương thức
3.1. Add
Thêm một Item vào SortedList theo Key chỉ định.
Key: Phải duy nhất trong SortedList và khác null. Key nhận kiểu dữ liệu hoặc là số hoặc là chuỗi.
Item: Nhận kiểu dữ liệu bất kỳ (kiểu số hoặc chuỗi, null), giá trị của Items có thể trùng nhau,có thể là một trị đơn, hoặc một mảng (array).
Chỉ số đầu tiên của Key/ Item trong SortedList bằng 0.
Khi một Item được thêm vào, nó được chèn vào SortedList theo thứ tự sắp xếp chính xác theo Keys, và chỉ mục (Index) của nó được thiết lập tương ứng phù hợp theo Key.
Ví dụ:
3.2. Clear
Xóa toàn bộ các Items trong SortedList.
Ví dụ:
3.3. Clone
Tạo một bản sao từ SortedList đã có.
Ví dụ:
3.4. Contains / ContainsKey
Kiểm tra sự tồn tại của một Key trong SortedList. Trả về True nếu Key đã tồn tại trong SortedList, ngược lại trả về False.
Lưu ý: Key chỉ định kiểm tra phải cùng kiểu dữ liệu (số hoặc chuỗi) với kiểu dữ liệu của Key đã có trong SortedList, nếu không xảy ra lỗi.
Ví dụ:
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
SortedList là một thư viện nằm trong “System.Collections” của .NET Framework.
SortedList lưu trữ các Items theo Keys tương ứng thành cặp, được sắp xếp theo các Keys, cho phép truy cập tới Item theo Key hoặc chỉ mục (index) ứng với Item đó.
Yêu cầu: Hệ thống phải cài đặt .NET Framework v1.1 trở lên.
Nội dung chính gồm:
#1
1. Khai báo SortedList
2. Các thuộc tính
2.1. Count
2.2. Capacity
2.3. Item
3. Các phương thức
3.1. Add
3.2. Clear
3.3. Clone
3.4. Contains / ContainsKey
#2
3.5. ContainsValue
3.6. GetByIndex
3.7. GetKey
3.8. GetKeyList
3.9. GetValueList
3.10. IndexOfKey
3.11. IndexOfValue
3.12. Remove
3.13. RemoveAt
3.14. SetByIndex
3.15. ToString
3.16. TrimToSize
#3
4. Ứng dụng
-----------------
1. Khai báo SortedList
1.1. Kiểu khai báo sớm
(Không có Tooltip khi gọi SortedList, phải thiết lập trong Tools/References)
- Trong cửa sổ VBA, Tools menu, References.
- Tìm và check vào mục “mscorlib.dll” trong cửa sổ References – VBAProject.
Khai báo trong code:
PHP:
Dim oSList As New SortedList
1.2. Kiểu khai báo muộn
(Không có Tooltip khi gọi SortedList, không cần thiết lập trong Tools/References).
Khai báo trong code:
PHP:
Dim oSList As Object
Set oSList = CreateObject("System.Collections.SortedList")
2. Các thuộc tính
2.1. Count
PHP:
oSList.Count
Ví dụ:
PHP:
Sub CountProperty()
'oSList.Count'
Dim oSList As Object, i As Long
Set oSList = CreateObject("System.Collections.SortedList")
For i = 1 To 5
oSList.Add "Key-" & i, i
Next i
oSList.Add "Key-", Array(2, 5)
MsgBox oSList.Count '6'
End Sub
2.2. Capacity
PHP:
oSList.Capacity
+ Các lỗi xảy ra đặt số lượng các phần tử cho SortedList:
- Khi giá trị của Capacity nhỏ hơn số lượng phần từ đã tồn tại trong SortedList (count).
- Khi giá trị của Capacity trả về SortedList có kích thước vượt dung lượng bộ nhớ có thể dùng của hệ thống (OutOfMemoryException).
+ Capacity luôn luôn lớn hơn hoặc bằng Count. Nếu Count vượt quá Capacity trong khi thêm các phần tử, Capacity sẽ tự động tăng lên bằng cách tái phân bổ lại mảng nội bộ trước khi sao chép các phần tử cũ và thêm các phần tử mới.
+ Có thể giảm Capacity bằng cách dùng phương thức TrimToSize hoặc bằng cách thiết lập giá trị Capacity cụ thể (nhưng phải đảm bảo >= Count, nếu không sẽ xảy ra lỗi). Khi giá trị của Capacity được xác định cụ thể, mảng nội bộ cũng được phân bổ lại để đáp ứng dung lượng đã xác định.
Ví dụ:
PHP:
Sub CapacityProperty()
'oSList.Capacity'
Dim oSList As Object, vCnt As Long, vCty As Long, i As Long
Set oSList = CreateObject("System.Collections.SortedList")
For i = 1 To 5
oSList.Add "Key-" & i, i
Next i
vCnt = oSList.Count '5'
vCty = oSList.capacity '16'
oSList.capacity = 5
MsgBox oSList.capacity '5'
End Sub
2.3. Item
PHP:
oSList.Item(Key)
'Hoặc:'
oSList(Key)
- Nếu gán một giá trị cho một Item theo một Key chưa tồn tại trong SortedList thì SortedList tự động thêm Key đó, và Item đó có giá trị vừa đưa vào.
Ví dụ:
PHP:
Sub ItemProperty()
'oSList.Item(Key) '
'oSList(Key) '
Dim oSList As Object, i As Long
Set oSList = CreateObject("System.Collections.SortedList")
For i = 1 To 5
oSList.Add "Key-" & i, ""
Next i
oSList.Item("Key-1") = 100
MsgBox oSList("Key-1") '100'
oSList("KeyA") = 20
MsgBox oSList.Count '6'
End Sub
3. Các phương thức
3.1. Add
PHP:
oSList.Add Key, Item
Key: Phải duy nhất trong SortedList và khác null. Key nhận kiểu dữ liệu hoặc là số hoặc là chuỗi.
Item: Nhận kiểu dữ liệu bất kỳ (kiểu số hoặc chuỗi, null), giá trị của Items có thể trùng nhau,có thể là một trị đơn, hoặc một mảng (array).
Chỉ số đầu tiên của Key/ Item trong SortedList bằng 0.
Khi một Item được thêm vào, nó được chèn vào SortedList theo thứ tự sắp xếp chính xác theo Keys, và chỉ mục (Index) của nó được thiết lập tương ứng phù hợp theo Key.
Ví dụ:
PHP:
Sub AddMethod()
'oSList.Add Key, Item '
'Key: OR number OR string, <>null'
'Item: number, string, array'
'First index = 0 '
Dim oSList As Object
Set oSList = CreateObject("System.Collections.SortedList")
oSList.Add "5", 20
oSList.Add "KeyA", "Item2"
oSList.Add "KeyB", ""
oSList.Add "KeyC", Array(12, 40)
End Sub
3.2. Clear
PHP:
oSortedList.Clear
Ví dụ:
PHP:
Sub ClearMethod()
'oSList.Clear'
Dim oSList As Object, i As Long
Set oSList = CreateObject("System.Collections.SortedList")
For i = 1 To 5
oSList.Add i, ""
Next i
oSList.Clear
MsgBox oSList.Count '0'
End Sub
3.3. Clone
PHP:
oSortedList.Clone
Ví dụ:
PHP:
Sub CloneMethod()
'oSList.Clone'
Dim oSList As Object, i As Long, newSList As Object
Set oSList = CreateObject("System.Collections.SortedList")
For i = 1 To 5
oSList.Add i, ""
Next i
Set newSList = oSList.Clone
MsgBox newSList.Count '5'
End Sub
3.4. Contains / ContainsKey
PHP:
oSList.Contains(Key)
oSList.ContainsKey(Key)
Lưu ý: Key chỉ định kiểm tra phải cùng kiểu dữ liệu (số hoặc chuỗi) với kiểu dữ liệu của Key đã có trong SortedList, nếu không xảy ra lỗi.
Ví dụ:
PHP:
Sub ContainsMethod()
'oSList.Contains(Key)'
Dim oSList As Object, i As Long, sKey As String
Set oSList = CreateObject("System.Collections.SortedList")
For i = 1 To 5
oSList.Add "Key-" & i, i
Next i
sKey = "Key-2"
MsgBox oSList.Contains(sKey) 'True'
End Sub
PHP:
Sub ContainsKeyMethod()
'oSList.ContainsKey(Key)'
Dim oSList As Object, i As Long, sKey As String
Set oSList = CreateObject("System.Collections.SortedList")
For i = 1 To 5
oSList.Add "Key-" & i, i
Next i
sKey = "Key-5"
MsgBox oSList.ContainsKey(sKey) 'True'
End Sub