在VB.Net中,有没有一种简单而美观的方法可以删除空列表中的空列表



我得到了一个整数列表。有些嵌套列表包含整数,有些则不包含。

Dim innerList1 As New List(Of Integer)
Dim innerList2 As New List(Of Integer)
Dim innerList3 As New List(Of Integer)
Dim outerList As New List(Of List(Of Integer))
innerList1.add(1)
innerList1.add(2)
innerList3.add(25)
outerList.add(innerList1)
outerList.add(innerList2)
outerList.add(innerList3)

输出可能如下所示:

路由列表:

innerList1:1 2

innerList2:

innerList3:25

现在我想删除空的innerList,代码如下:

For i = 0 to outerList.Count() - 1
If (outerList(i).Count() = 0) Then
outerList.remove(outerList(i))
End If
Next

问题是,一旦删除innerList,在一些迭代之后,索引将超出范围。

我还尝试了while语句和do循环。但什么都没用。

如果有人能帮助我,我将非常感激:(

简短而漂亮的方法是使用RemoveAll方法,它将删除所有满足特定条件的项目:

outerList.RemoveAll(Function(l) l.Count = 0)

请注意,这也使用了ListCount属性,而不是Enumerable.Count扩展方法。通过像您所做的那样添加括号,您就调用了该扩展方法。当您知道列表的类型并且它有一个专用属性时,不要这样做,例如这里的Count或数组的Length

好的,我找到了一个awnser。我只是以相反的方向循环浏览我的列表,所以索引永远不会超出范围。

或者使用LINQ:

outerList = outerList.Where(Function(x) x.Count > 0).ToList()

(注意,这将用一个新的outerList替换outerList。如果您所在的子/函数中outerList已被ByVal传递(不建议使用ByRef(,则调用子不会看到更改(

最新更新