Arrays 如何将字符串添加到数组VB.NET?

Arrays 如何将字符串添加到数组VB.NET?,arrays,vb.net,Arrays,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

我有一个这样的数组

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
对于membertable.Rows.Count-1的i=0
If InStr(membertable.Rows(i)(“名称”),txtSearch.Text,CompareMethod.Text)-1_
-1和txtSearch.Text.Length>=3,然后
找到=真
'将符合条件的项添加到此处的数组中。
如果结束
接下来我

因此,代码在访问表的行中循环,每次在“name”列下找到一个符合条件的值时,我都要将该项添加到数组中。数据库项将始终是字符串

数组具有固定长度。使用
列表(字符串)
代替:

Dim list As New List(Of String)()

...

list.Add(someString);
注意:列表在内部使用数组并自动调整其大小(基本上与重拨保留的操作相同)。不是每次添加时将列表大小增加一个元素,而是从数组大小4开始,每次数组太小时将其大小增加一倍。这减少了所需的复制操作的数量,因为增加数组的大小意味着创建一个新数组,并将旧数组的内容复制到新数组中

因此,自己使用
Redim
是没有意义的,因为列表可以自动高效地为您提供服务



顺便说一下,
InStr(…)-1-1
是一种奇怪的情况。它的目的是什么<代码>指令(…)0等效。条件不应该是
指令(…)-1
?或
membertable.Rows(i)(“name”).Contains(txtSearch.Text)

要回答您的问题,您需要在每次添加其他项时重新对数组进行尺寸标注:

Redim Preserve array(array.length)
然后将您的项目添加到最后一个:

array(array.length - 1) = ???
重要的是使用PRESERVE关键字。否则,您的阵列将被清除

更好的方法是根本不使用数组,而是使用集合或列表。

使用
列表(字符串)
而不是数组。您还可以
LINQ
查看结果。最好不要将变量命名为与数据类型相同的名称

Dim myList = (From dr As DataRow In membertable.Rows Where dr("name").ToString = txtSearch.Text).ToList

这取决于向数组中添加元素的频率。当它发生多次时,您不应该使用任何形式的数组,包括
List
s。也许
LinkedList
s就是您要搜索的内容。它们提供了高效的添加(特别是在任何地方,进一步删除也很有效)。它们唯一的缺点是O(n)索引“慢”。每个查找的顺序
始终为O(n),并且它们和数组之间几乎没有任何区别


如果您只是创建元素然后处理它们,您可以使用
迭代器函数
s(也可以在您的过程中使用lambda)。

您能提到输入字符串和所需输出吗输入字符串是一个名称,例如输入“Ben”输入文本框将导致代码查找数据库中包含字符串“Ben”的所有名称。我希望将所有这些字符串放入一个数组中。为什么要在这些行中循环,为什么不使用文本作为搜索条件来获取包含文本的行?关于
myArray.SetValue('ben',I)
为什么不简单地
myArray(I)=“ben”
?但这会更新现有阵列位置。它不会添加新的数组,即数组的大小保持不变。如果数组长度为10,则不能添加第十一个元素。您只能使用列表执行此操作。