我有一个值列表,这些都是字母和数字的组合,用于制作ID,但在某些情况下,这可能只是一个0.
我需要删除这是0的所有场合.
我尝试过类似的东西
For i = 0 the list.count - 1
If list(i) = "0" Then
list.RemoveAt(j)
End If
Next
Run Code Online (Sandbox Code Playgroud)
但是这会在最后抛出一个超出范围异常的参数,因为循环继续,我不能使用Exit For,因为我需要检查多个零.
我不太擅长看起来像我想做的那样的Lamda表达,并且不理解它们,所以如果有人可以给出并解释一个可行的,那就太棒了.
从列表的末尾开始向后向 0
For i = list.count - 1 to 0 Step -1
If list(i) = "0" Then
list.RemoveAt(j)
End If
Next
Run Code Online (Sandbox Code Playgroud)
如果您想将 linq 与 lambda 一起使用,请使用 Where to keep all items that not equal to "0" 并重新创建列表 ToList
list = list.Where(function(value) value <> "0").ToList
Run Code Online (Sandbox Code Playgroud)
这种情况下的 lamda 与
Function IsNotZero(value As String) As Boolean
return value <> "0"
End Function
Run Code Online (Sandbox Code Playgroud)
使用LINQ或lambda表达式可以很容易地解决这个问题.
IEnumerable(Of T)接口包含一个名为的方法RemoveAll.这个函数看起来有点令人生畏,因为它需要一个相当讨厌的参数,但它确实没有它看起来那么糟糕.
因此传入的参数RemoveAll可以是匿名函数或函数的地址.对于这种情况,匿名函数是要走的路.
要从满足条件的字符串列表中删除所有对象,您可以使用:
list.RemoveAll(Function(o) o="0")
Run Code Online (Sandbox Code Playgroud)
这段简短的代码实际上做了很多事情.首先,它创建一个匿名函数,它接受一个字符串作为参数,并将该字符串的比较结果返回到文字"0".接下来,该RemoveAll函数使用该匿名函数来评估其所有成员,list并在匿名函数求值为true时删除该对象.
替代方案:
可以使用函数指针完成相同的代码.这种方法会产生更多代码,但允许您在比较逻辑中执行更多操作,而不是将每个值与文字进行比较.
我们仍然RemoveAll像以前一样调用函数,但是这次我们传递一个具有类似签名的函数的地址,Public Function <FunctionName>(byval Param As String) As Boolean如果签名不匹配,那么你将得到一个错误.
List.RemoveAll(AddressOf TestFunction)
Run Code Online (Sandbox Code Playgroud)
接下来,我们在程序中的其他位置定义该函数.
Public Function TestFunction(ByVal item As String) As Boolean
return item = "0"
End Function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5165 次 |
| 最近记录: |