Tôi có một mảng động. Nhưng ban đầu tôi không biết chiều dài của mảng. Tôi có thể làm như đầu tiên tôi thiết lập độ dài của nó là 1 và sau đó tăng chiều dài như tôi cần mà không bị mất dữ liệu được lưu trữ trước đó?
Tôi biết tôi có thể thực hiện tác vụ đó bằng TList. Nhưng tôi muốn biết liệu tôi có thể làm điều đó với mảng hay không?Tôi có thể thay đổi kích thước một mảng Delphi mà không làm mất nội dung trước đó của nó không?
Trả lời
Mảng động có thể được thay đổi kích thước thành kích thước lớn hơn mà không làm mất dữ liệu được chứa.
Chương trình sau đây thể hiện điều này đang hoạt động.
program Project7;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
A : Array of Integer;
I : Integer;
begin
for I := 0 to 19 do
begin
SetLength(A,I+1);
A[I] := I;
end;
for I := Low(A) to High(A) do
begin
writeln(A[I]);
end;
readln;
end.
Chỉ cần nhận thức nó có thể là một hoạt động chuyên sâu bộ nhớ, bởi vì toàn bộ mảng có thể được di chuyển nếu không có đủ không gian để mở rộng nó, nơi nó được phân bổ. Một mảng, không giống như các danh sách, phải được cấp phát trong một khối bộ nhớ contiguos. Đó là lý do tại sao danh sách (và các thùng chứa khác) tồn tại. Sử dụng thùng chứa tốt nhất cho nhu cầu của bạn. –
@ldsandon: Hãy cẩn thận: Nhiều "danh sách" trong Delphi được triển khai dưới dạng mảng hoặc ít nhất là khối bộ nhớ tiếp giáp theo cùng cách với mảng "dưới mui xe". TList, TObjectList, TStringList ... những danh sách thường gặp nhất là tất cả các mảng có hiệu quả bên trong trình bao bọc đối tượng. Tuy nhiên, "Độ dài" của các mảng "" này có các công cụ quản lý linh hoạt hơn các mảng "thực", vì chúng hỗ trợ cả Dung lượng (kích thước của "mảng") và Đếm (số phần tử thực sự được sử dụng) để bạn có thể phân bổ trước bộ nhớ tiếp giáp bạn cần (thông qua Dung lượng) trước khi điền. – Deltics
Một điểm làm rõ mà bạn có thể đã biết. Tôi không biết nếu bất kỳ tối ưu hóa này sẽ quan trọng trên các máy hiện đại, nhưng ví dụ trên gọi SetLength() cho * mọi * yếu tố mới. Theo ghi chú bình luận của Idsandon, SetLength có thể là bộ nhớ chuyên sâu. Nếu đó là trường hợp, sau đó gọi SetLength() ít thường xuyên hơn có thể nhanh hơn. Ví dụ, bạn có thể gọi nó một lần mỗi 100 (hoặc thậm chí 1000) yếu tố. Tất nhiên, bạn phải theo dõi khi bạn cần gọi nó: nếu (Độ dài (A) <(I + 1) thì SetLength (A, I + 100); – RobertFrank
- 1. làm thế nào để thay đổi kích thước của html5 vải mà không có nó rộng nội dung
- 2. Thay đổi kích thước bảng trong GUI mà không thay đổi kích thước của nội dung (MATLAB)
- 3. Làm cách nào để tự động thay đổi kích thước div thành kích thước nội dung của nó khi nội dung của div đã thay đổi?
- 4. Thay đổi kích thước khung UIWebView không thay đổi kích thước nội dung bên trong
- 5. Cách đổi kích thước WebView theo nội dung của nó?
- 6. Thay đổi kích thước JScrollpane với nội dung có kích thước thay đổi
- 7. Tôi có thể xóa nội dung ô mà không thay đổi kiểu dáng không?
- 8. Việc thay đổi kích thước mảng có gọi GC không?
- 9. Nhận ListBox để thay đổi kích thước với cửa sổ, nhưng không thay đổi kích thước với nội dung
- 10. Flex 4: Có thể có BorderContainer tự động kích thước nội dung bên trong nó không?
- 11. iframe Thay đổi kích thước để phù hợp với nội dung của nó
- 12. UIWebView - Không thay đổi kích thước nội dung về thay đổi xoay?
- 13. Thay đổi nội dung kích thước cột trong SQL Server
- 14. Thay đổi kích thước hình ảnh trong asp.net mà không làm mất chất lượng hình ảnh
- 15. Làm thế nào tôi có thể đuôi một tệp nén mà không đọc toàn bộ nội dung của nó?
- 16. Kích thước tự động ElementHost với nội dung của nó
- 17. Cột/bảng có thể thay đổi kích thước cho nội dung trong jquery?
- 18. Nếu tôi có nội dung của một tệp zip trong một chuỗi Python, tôi có thể giải nén nó mà không cần viết nó vào một tệp không?
- 19. Cách thay đổi kích thước nội dung JavaFX ScrollPane cho vừa với kích thước hiện tại
- 20. Trong PHP, có thể kiểm tra nội dung của tệp Zip mà không trích xuất nội dung của nó trước không?
- 21. Looping một mảng kích thước cố định mà không cần xác định kích thước của nó trong C
- 22. "EXC_BAD_ACCESS: Không thể khôi phục khung đã chọn trước đó" Lỗi, kích thước mảng?
- 23. Tôi làm cách nào để thay đổi kích thước hình ảnh mà không kéo dài?
- 24. Tôi có nên thay đổi kích thước bitmap trước khi thêm vào một ImageView hoặc để ImageView thay đổi kích thước của Bitmap không?
- 25. Thay đổi kích cỡ khung HTML để trống nội dung của nó
- 26. Làm thế nào để bạn thay đổi kích thước nội dung văn bản của Silverlight?
- 27. Làm thế nào tôi có thể ngăn Emacs thay đổi kích thước cửa sổ của tôi?
- 28. Tôi có thể thay đổi kích thước cửa sổ trình duyệt không?
- 29. Cách thay đổi kích cỡ hình ảnh mà không làm mất chất lượng
- 30. Làm cho QTreeView tự động thay đổi kích thước thành nội dung
Bạn đã đọc tài liệu về mảng động chưa? Bạn không hiểu phần nào của nó? –