繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM