首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

脑子不转了,请大家帮助arrayList 删除的有关问题

2012-05-09 
脑子不转了,请大家帮助arrayList 删除的问题Dim arr As New ArrayListarr.Add(aaaa)arr.Add(bbb)arr.A

脑子不转了,请大家帮助arrayList 删除的问题
Dim arr As New ArrayList
  arr.Add("aaaa")
  arr.Add("bbb")
  arr.Add("ccc")
  Try
  Dim cou As Integer = arr.Count - 1
  For k = 0 To cou
  Try
  Dim s As String = arr.Item(k)
  If s = "bbb" Then
  arr.Remove(s)
  ‘请问再加什么才是正确的??





  End If
  Catch ex As Exception
  MsgBox(ex.Message)
  End Try
  Next

  Catch ex As Exception
  MsgBox(ex.Message)
  End Try
 

[解决办法]

探讨

刚才发错了。重新发送
Dim arr As New ArrayList
arr.Add("aaaa")
arr.Add("bbb")
arr.Add("ccc")
Try
Dim cou As Integer = arr.Count - 1
For k = 0 To ……

[解决办法]
移除完了就完了?你还想。移除完后就剩下 aaaa ccc了
详细参考http://www.2cto.com/kf/201007/52859.html
[解决办法]
一定要这么写的话:
k-=1……
你删掉一个元素之后,后面的元素就前移了,这时索引不能增长,不然就跳过了一个元素
这样有个缺点,就是循环的终止值不确定。你不知道最后容器会剩下多少元素,必须实时读取容器的长度。
你这里看起来是用Try...Catch捕获IndexOutOfRangeException来回避这个问题……

还有就是,每删一个元素,后面的元素就往前移动一次,如果元素很多,移动元素消耗的时间会非常多。
所以一般是扫描容器,把需要保留的元素移动到容器前端,然后清空后面多出来空间。
如果元素少,觉得这么做麻烦的话可以从后往前删,for k=cou to 0,不过元素多的话还是得用上面那种方法。

说了那么多,实际上用List<T>的RemoveAll就可以满足需求了。
[解决办法]
应该说是“元素多,需要删除的元素也比较多”才准确
如果只是元素多,需要删除的元素只有一个的话没什么区别,都要移动一次。
[解决办法]
报的是下标越界的错么?如果只删除"bbb"的话,删除之后就可以退出FOR了啊

If s = "bbb" Then
arr.Remove(s)
Exit For
End If
[解决办法]
For k = cou to 0 Step -1

................

 
[解决办法]
删除之后,arr.count已经变了,千万要注意这一点
[解决办法]
VB.NET code
        Dim arr As New ArrayList        Dim s As String = "ccc"        arr.Add("aaa")        arr.Add("bbb")        arr.Add("ccc")        For i As Integer = 0 To arr.Count - 1            If s = arr(i) Then                arr.Remove(arr.Item(i))                Exit For            End If        Next        For j As Integer = 0 To arr.Count - 1            Console.WriteLine(arr(j))        Next        Console.ReadLine()
[解决办法]
探讨

VB.NET code

Dim arr As New ArrayList
Dim s As String = "ccc"
arr.Add("aaa")
arr.Add("bbb")
arr.Add("ccc")
For i As Integer = 0 To arr.Count - 1
……

[解决办法]
不要在for循环里 边循环边删除

可以先循环出 要删除的 index,最后统一删除
[解决办法]
新建1个list

循环原来list 把要删除的 add到新的list



循环新的list 根据新的list删除原来的list
[解决办法]
像这样的情况也还可以倒着来!

探讨
不要在for循环里 边循环边删除

可以先循环出 要删除的 index,最后统一删除

[解决办法]
呵呵 我说的第一点 就是 第三点 只是第一次没说清楚, 那个第一点是错的 删除1个 index就改了 不能用于删除第二个
[解决办法]
呵呵,倒着来是最简单的解决办法,不会报下标越界
也不用退出for语句

热点排行