[英]How to add a string to an array VB.NET?
我有一個像這樣的數組
Dim array() As String = {}
和下面的代碼
For i = 0 To membertable.Rows.Count - 1
If InStr(membertable.Rows(i)("name"), txtSearch.Text, CompareMethod.Text) - 1 _
<> -1 And txtSearch.Text.Length >= 3 Then
found = True
'add the item that matches the criteria to the array here.
End If
Next i
因此代碼循環遍歷訪問表的行,每次它在“名稱”列下找到一個與我想將該項目添加到數組的條件匹配的值。 數據庫項目將始終是一個字符串。
Arrays 具有固定長度。 使用List(Of String)
代替:
Dim list As New List(Of String)()
...
list.Add(someString)
注意:列表在內部使用 arrays 並自動調整它們的大小(基本上與Redim Preserve
相同)。 他們不是在每次添加時將列表大小增加一個元素,而是從 4 的數組大小開始,並且每次數組變得太小時將其大小加倍。 這減少了所需的復制操作次數,因為增加數組的大小意味着創建一個新數組並將舊數組的內容復制到新數組。
因此,您自己使用Redim
真的毫無意義,因為列表會自動高效地為您服務。
順便說一句, InStr(...) - 1 <> -1
是一個奇怪的條件。 它的目的是什么? InStr(...) <> 0
是等效的。 條件不應該是InStr(...) <> -1
嗎? 或者membertable.Rows(i)("name").Contains(txtSearch.Text)
?
要回答您的問題,您需要在每次要添加另一個項目時重新調整數組的尺寸:
Redim Preserve array(array.length)
然后將您的項目添加到最后一個:
array(array.length - 1) = ???
重要的是使用 PRESERVE 關鍵字。 否則,您的陣列將被清除。
更好的方法是根本不使用數組,而是使用集合或列表。
使用List(Of String)
而不是數組。 你也可以LINQ
結果。 最好不要將變量命名為與數據類型同名。
Dim myList = (From dr As DataRow In membertable.Rows Where dr("name").ToString = txtSearch.Text).ToList
這取決於您向數組添加元素的頻率。 當它多次發生時,你不應該使用任何形式的 arrays 包括List
s。 也許LinkedList
是您正在尋找的。 它們提供高效的添加(尤其是在任何地方,進一步刪除也很有效)。 它們唯一的缺點是“慢”的 O(n) 索引。 Sequential For Each
查找總是 O(n),它們與 arrays 之間幾乎沒有任何區別。
如果您只是創建元素然后處理它們,則可以使用Iterator Function
s(也可以在您的過程中使用 lambda)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.