Vâng, bạn đang tìm kiếm tuyên bố ReDim
, mà tự động phân bổ số tiền yêu cầu của không gian trong mảng.
Tuyên bố sau
Dim MyArray()
tuyên bố một mảng mà không cần kích thước, vì vậy trình biên dịch không biết lớn như thế nào nó là gì và không thể lưu trữ bất cứ điều gì bên trong của nó.
Nhưng bạn có thể sử dụng câu lệnh ReDim
để thay đổi kích thước các mảng:
ReDim MyArray(0 To 3)
Và nếu bạn cần thay đổi kích thước mảng trong khi giữ gìn nội dung của nó, bạn có thể sử dụng từ khóa Preserve
cùng với báo cáo kết quả ReDim
:
ReDim Preserve MyArray(0 To 3)
Nhưng đừng lưu ý rằng cả ReDim
và đặc biệt là ReDim Preserve
có chi phí hoạt động nặng. Cố gắng tránh làm điều này hơn và hơn trong một vòng lặp nếu có thể; người dùng của bạn sẽ cảm ơn bạn.
Tuy nhiên, trong ví dụ đơn giản thể hiện trong câu hỏi của bạn (nếu nó không chỉ là một mẫu throwaway), bạn không cần phải ReDim
ở tất cả. Chỉ cần khai báo mảng có kích thước rõ ràng:
Dim MyArray(0 To 3)
Nguồn
2012-01-13 13:09:11
Tại sao bạn làm điều đó * trong * vòng lặp? 'ReDim', và đặc biệt là khi bạn thêm' Preserve', là một kẻ giết người hiệu suất tiềm năng. Bạn biết bao nhiêu lần vòng lặp sẽ lặp đi lặp lại, do đó chắc chắn làm điều đó bên ngoài vòng lặp. Sau đó, bạn chỉ thay đổi kích thước mảng một lần, và bạn không cần 'Preserve'. –
@CodyGray Bạn hoàn toàn đúng nếu kích thước mảng cuối cùng đã được xác định khi nhập vòng lặp. Đặt Redim bên trong vòng lặp sẽ là một kẻ giết người hiệu suất. Tuy nhiên, tôi giả định rằng kích thước của mảng không được xác định khi nhập vòng lặp. Nếu không, toàn bộ mẫu không có ý nghĩa gì cả ... – Fluffi1974
Nó * có * được xác định khi nhập vòng lặp. Bạn phải xác định phạm vi của vòng lặp. Thậm chí nếu nó là một biến thay vì một hằng số như '3', bạn vẫn đang xác định một giới hạn trên trong câu lệnh' For'. Sử dụng nó để tự động khởi tạo kích thước của mảng. –