Tôi có mảng số nguyên động mà tôi muốn thêm giá trị mới. Tôi làm nó như thế nào?Thêm giá trị mới vào mảng số nguyên (Visual Basic 2010)
Dim TeamIndex(), i As Integer
For i = 0 to 100
'TeamIndex(i).Add = <some value>
Next
Tôi có mảng số nguyên động mà tôi muốn thêm giá trị mới. Tôi làm nó như thế nào?Thêm giá trị mới vào mảng số nguyên (Visual Basic 2010)
Dim TeamIndex(), i As Integer
For i = 0 to 100
'TeamIndex(i).Add = <some value>
Next
Sử dụng ReDim với Bảo tồn để tăng kích thước mảng bằng cách giữ nguyên giá trị cũ.
Vòng lặp ReDim được khuyên dùng khi bạn không có ý tưởng về kích thước và đã biết để tăng kích thước Mảng một.
Dim TeamIndex(), i As Integer
For i = 0 to 100
ReDim Preserve TeamIndex(i)
TeamIndex(i) = <some value>
Next
Nếu bạn khai báo kích thước của mảng tại sau này trong mã trong bắn sau đó sử dụng
ReDim TeamIndex(100)
Vì vậy, các mã sẽ là:
Dim TeamIndex(), i As Integer
ReDim TeamIndex(100)
For i = 0 to 100
TeamIndex(i) = <some value>
Next
Bạn có thể Sử dụng ArrayList/Danh sách (T) để sử dụng Thêm/Loại bỏ các giá trị tự động hơn.
Sub Main()
' Create an ArrayList and add three strings to it.
Dim list As New ArrayList
list.Add("Dot")
list.Add("Net")
list.Add("Perls")
' Remove a string.
list.RemoveAt(1)
' Insert a string.
list.Insert(0, "Carrot")
' Remove a range.
list.RemoveRange(0, 2)
' Display.
Dim str As String
For Each str In list
Console.WriteLine(str)
Next
End Sub
Không có gì trong câu trả lời Romil của mà tôi cho là sai nhưng tôi sẽ đi xa hơn. ReDim Preserve
là một lệnh rất hữu ích nhưng điều quan trọng là nhận ra rằng đó là một lệnh đắt tiền và sử dụng nó một cách khôn ngoan.
xem xét:
Dim TeamIndex(), i As Integer
For i = 0 to 100
ReDim Preserve TeamIndex(i)
TeamIndex(i) = <some value>
Next
Đối với mỗi vòng lặp, trừ i = 0, Common Language Runtime (CLR) phải:
ArrayList
là tuyệt vời nếu bạn cần thêm hoặc xóa phần tử ở giữa mảng nhưng bạn đang trả tiền cho chức năng đó ngay cả khi bạn không cần. Ví dụ: nếu bạn đang đọc các giá trị từ một tệp và lưu trữ chúng theo tuần tự nhưng không biết trước số lượng giá trị sẽ có, thì ArrayList
mang một chi phí lớn mà bạn có thể tránh.
tôi luôn luôn sử dụng ReDim
như thế này:
Dim MyArray() As XXX
Dim InxMACrntMax As Integer
ReDim MyArray(1000)
InxMACrntMax=-1
Do While more data to add to MyArray
InxMACrntMax = InxMACrntMax + 1
If InxMACrntMax > UBound(MyArray) Then
ReDim Preserve MyArray(UBound(MyArray)+100)
End If
MyArray(InxMACrntMax) = NewValue
Loop
ReDim MyArray(InxMACrntMax) ' Discard excess elements
Trên Tôi đã sử dụng 100 và 1000. Các giá trị tôi chọn phụ thuộc vào đánh giá của tôi về yêu cầu có khả năng.
Không cần phải định lại và bảo tồn. Chỉ cần khởi tạo mảng với kích thước 100 [kích thước giả định là 100] – Writwick
'Đối với i = 0 đến SomeNo'. Vì vậy, nếu Array sẽ được khởi tạo 'As New Integer (SomeNo)', 'ReDim' và' Preserve' sẽ không cần thiết trong trường hợp này [Example by asker] là 'SomeNo' là hằng số. Theo đó, nếu 'SomeNo' cũng biến và liên tục thay đổi thì' ReDim' và 'Preserve' sẽ là cần thiết! – Writwick
+1 nhưng Danh sách (Of T) nên được ưu tiên hơn ArrayList cho mã mới – MarkJ