@CharlesWilliams câu trả lời là chính xác: lặp qua tất cả các giá trị của một mảng nhanh hơn việc lặp lại một Bộ sưu tập hoặc từ điển: rất nhiều, vì vậy tôi luôn sử dụng phương thức Keys() hoặc Items() của từ điển khi tôi cần thực hiện điều đó. một mảng vectơ.
Lưu ý: Tôi sử dụng lớp Từ điển nhiều hơn tôi sử dụng bộ sưu tập, phương thức Exists() quá hữu ích.
Có, hoặc tất nhiên, hạn chế đối với bộ sưu tập và từ điển. Một trong số đó là các mảng có thể là 2 hoặc thậm chí 3 chiều - một cấu trúc dữ liệu tốt hơn nhiều cho dữ liệu được lập bảng. Bạn có thể mảng lưu trữ làm thành viên của bộ sưu tập, nhưng có một số nhược điểm: một trong số đó là bạn có thể không tham chiếu đến mục đó - trừ khi bạn sử dụng arrItem = MyDictionary(strKey)
bạn gần như chắc chắn sẽ nhận được bản sao 'ByVal' mảng; đó là xấu nếu dữ liệu của bạn là động và có thể thay đổi theo nhiều quy trình. Nó cũng chậm: rất nhiều phân bổ và deallocation.
Tệ hơn hết, tôi không hoàn toàn tin tưởng VBA để deallocate bộ nhớ nếu tôi có một bộ sưu tập hoặc từ điển với các mảng như các thành viên (hoặc đối tượng!): Không vào out-of-phạm vi, không phải bởi Set objCollection = Nothing
, thậm chí không Bởi objDictionary.RemoveAll - rất khó để chứng minh rằng vấn đề tồn tại với bộ công cụ kiểm tra giới hạn có sẵn trong VBE, nhưng tôi đã thấy đủ rò rỉ bộ nhớ trong các ứng dụng sử dụng các mảng trong từ điển để biết rằng bạn cần phải thận trọng. Điều đó đang được nói, tôi không bao giờ sử dụng một mảng mà không có lệnh Erase ở đâu đó.
@JMax đã giải thích các điểm cộng lớn khác cho mảng: bạn có thể điền một mảng trong một lần 'nhấn' vào trang tính và viết lại tác phẩm của mình chỉ trong một lần truy cập.Bạn có thể, tất nhiên, tận dụng tối đa cả hai thế giới bằng cách xây dựng một lớp Mảng được lập chỉ mục: mảng 2 chiều với các đối tượng bộ sưu tập hoặc từ điển được liên kết lưu trữ một số loại định danh hàng làm khóa và hàng thứ tự làm Các mục dữ liệu.
Nguồn
2012-05-15 13:01:37
Ngoài ra các mảng hoạt động tốt hơn các bộ sưu tập (ngoại trừ truy cập tra cứu khóa khi bạn không thể lập chỉ mục trực tiếp vào mảng). –
@CharlesWilliams: cảm ơn cho mẹo – JMax
Bộ sưu tập không phải lưu trữ khóa, đó là tùy chọn. Bộ sưu tập cũng có thể lưu trữ bất kỳ giá trị nào, chỉ các khóa (nếu bạn sử dụng chúng) phải là duy nhất. – Cutter