Cách nhanh nhất để thêm một mục mới vào một mảng hiện có là gì?Cách nhanh nhất để thêm một mục vào một mảng
Dim arr As Integer() = {1, 2, 3}
Dim newItem As Integer = 4
(tôi đã biết rằng khi làm việc với danh sách năng động của các bạn chứ không nên sử dụng một List
, ArrayList
hoặc tương tự IEnumerables
. Nhưng phải làm gì nếu bạn đang mắc kẹt với mã di sản mà sử dụng mảng?)
những gì tôi đã cố gắng cho đến nay:
' A) converting to List, add item and convert back
Dim list As List(Of Integer)(arr)
list.Add(newItem)
arr = list.ToArray()
' --> duration for adding 100.000 items: 33270 msec
' B) redim array and add item
ReDim Preserve arr(arr.Length)
arr(arr.Length - 1) = newItem
' --> duration for adding 100.000 items: 9237 msec
' C) using Array.Resize
Array.Resize(arr, arr.Length + 1)
arr(arr.Length - 1) = newItem
' --> duration for adding 100.000 items: 1 msec
' --> duration for adding 100.000.000 items: 1168 msec
A) có vẻ rất chậm vì mỗi lần một mục được bổ sung thêm hai chuyển đổi của toàn bộ mảng được thực hiện. B) có vẻ nhanh hơn nhưng mảng vẫn được sao chép một lần trong ReDim Preserve
. C) có vẻ là nhanh nhất vào thời điểm này. Có điều gì tốt hơn không?
Với sự tôn trọng, tôi nghĩ rằng bạn đang so sánh táo với xoài: ai sẽ không bao giờ sử dụng thay thế đầu tiên của bạn. Một trong những ưu điểm của danh sách là tốc độ bạn có thể thêm các mục mới vào nó (nếu bạn không thực hiện chuyển đổi thành mảng, chỉ cần thêm mục, bạn sẽ thấy rằng nó nhanh hơn nhiều so với bất kỳ phương án nào khác): nếu bạn chỉ quan tâm đến việc thêm các mục một cách nhanh chóng, sử dụng một danh sách (không dựa vào một mảng nào cả). Ngoài ra danh sách cho phép nhiều tùy chọn hơn để kiểm tra/chỉ mục các mục của nó so với những gì mảng cho phép. NHƯNG khác hơn thế, trong hiệu suất thuần túy (trong vòng lặp, ví dụ), chúng tệ hơn nhiều ... – varocarbas
Tóm tắt: sử dụng mảng và danh sách trong các tình huống tốt nhất. Mặc dù VB.NET cho phép redimensioning, đây không phải là những gì một mảng được mong đợi để đi qua: mảng cung cấp hiệu suất tốt nhất trong điều kiện kích thước cố định, chỉ cần lặp đi lặp lại nhiều lần trong các phần tử của nó. Mặt khác, các danh sách có nghĩa là điều trị ít lặp đi lặp lại: số lượng yếu tố thấp hơn, thay đổi thường xuyên về kích thước, truy vấn ưa thích để truy cập các phần tử, v.v. tất cả đều là các hàm mà mảng không tốt lắm. Vì vậy, mảng cho hiệu suất dưới điều kiện có kích thước cố định; Danh sách để thay đổi điều kiện. – varocarbas
PS: Danh sách cũng ít hiệu quả về bộ nhớ hơn. – varocarbas