如何从数组中删除字符串?

时间:2016-03-14 02:08:01

标签: vb.net

在我的代码中,我有一个添加按钮,可以将一个单词添加到数组中最多10次。我如何能够创建一个删除按钮,以便能够键入当前标签中的单词并从标签和数组中删除该单词。

注意:要添加到Label,您还必须在TextBox中键入单词,然后单击“添加”按钮。

Public Class Form1

Dim i, j As Integer

Dim s(9) As String

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    'working add button

    Label1.Text = Nothing

    s(j) = TextBox1.Text

    For i = 0 To 9

        Label1.Text &= s(i) & " "
    Next

    j += 1

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    'attempt at a delete button

    s(j) = TextBox1.Text

    For i = 0 To 9

        If deleteWord = s(j) Then

            deleteWord = Nothing

            ReDim Preserve s(s.Length - 1)

            Label1.Text &= s(i) & " "

        End If

    Next

    j += 1

End Sub

结束班

1 个答案:

答案 0 :(得分:0)

解决问题的最简单方法是使用List(Of T),因为您只需要执行以下任一操作:

MyList.Remove(deleteWord)

或:

MyList.RemoveAt(<index>)

但是如果你真的想使用数组,你可以使用我已经创建的这种扩展方法。

首先,转到Add New Item或按CTRL + Shift + A添加新模块。选择Module并将其命名为Extensions

然后将此扩展方法复制到您的模块中:

Public Module Extensions
    <Runtime.CompilerServices.Extension()> _
    Public Sub RemoveAt(Of T)(ByRef InputArray As T(), ByVal Index As Integer)
        Array.Copy(InputArray, Index + 1, InputArray, Index, (InputArray.Length - 1) - Index)
        Array.Resize(InputArray, InputArray.Length - 1)
    End Sub
End Module

扩展方法的工作方式如下:它复制自身的子部分(指定索引之后的所有内容),并用它替换要删除的项目。从技术上讲,它将指定索引后的每个项目向左移动一步。 {0, 1, 2, 3} -> {0, 2, 3, <unused>}

然后调整数组大小以删除最后一个未使用的索引。

完成后,您可以在循环中使用这样的扩展方法:

If deleteWord = s(i) Then
    s.RemoveAt(i) 'Removes the specified item.
End If

甚至更简单,没有循环:

Dim Index As Integer = Array.IndexOf(s, deleteWord)
If Index > -1 Then
    s.RemoveAt(Index)
End If