删除另一个数组列表中存在的数组列表中的元素

嘿嘿

我有2个数组列表,dateListDead和dateListNotMinggu。两者都是数组的DateTime列表。这是日期值的阵列中的列表中的ilustration ArrayList中值

它应该删除存在于其他数组列表中的特定元素。

到目前为止,我尝试过,此代码不起作用。

 Dim d, x As Integer
 For x = 0 To dateListDead.Count - 1
    For d = 0 To dateListNotMinggu.Count - 1
        If dateListNotMinggu(d) = dateListDead(x) Then
               dateListNotMinggu.RemoveAt(d)
        End If
    Next
 Next

错误是:索引超出范围。怎么会这样 ?我基于arraylist.count -1定义了结束循环的参数

金西尼

主要是您正在使用For从第一个索引到最后一个索引循环,但是在删除值时没有考虑索引的变化。如果可能有多个值,则应该从头开始,从头开始,而不是从头开始。在这种情况下,删除项目不会影响您要测试的项目的索引。如果只有一场比赛,那么当您找到一场比赛时,您应该退出循环。

无论哪种方式,虽然您不必这样做,但我建议For Each在外部使用循环。如果要对列表中的每个项目执行操作,那么这正是For Each循环的目的。For在需要将循环计数器用于除依次访问每个项目以外的其他用途时,才使用循环。

对于多个比赛:

For Each dateDead As Date In dateListDead
    For i = dateListNotMinggu.Count - 1 To 0 Step -1
        If CDate(dateListNotMinggu(i)) = dateDead Then
            dateListNotMinggu.RemoveAt(i)
        End If
    Next
Next

对于单场比赛:

For Each dateDead As Date In dateListDead
    For i = 0 To dateListNotMinggu.Count - 1
        If CDate(dateListNotMinggu(i)) = dateDead Then
            dateListNotMinggu.RemoveAt(i)
            Exit For
        End If
    Next
Next

请注意,我也将Date值转换为该类型以进行比较,这是必需的Option Strict OnOption StrictOff默认设置,但是您应该始终将其打开,On因为它将通过专注于数据类型来帮助您编写更好的代码。

另外,上面的代码可与List(Of Date)以及一起使用ArrayList但对不需要强制转换List(Of Date)这是使用泛型List(Of T)而非的优势之一ArrayList,而泛型对包含的内容没有任何限制。

如果您确实必须使用For循环,因为那是您的作业所要说的,那么它将看起来像这样:

For i = 0 To dateListDead.Count - 1
    For j = dateListNotMinggu.Count - 1 To 0 Step -1
        If CDate(dateListNotMinggu(j)) = CDate(dateListDead(i)) Then
            dateListNotMinggu.RemoveAt(j)
        End If
    Next
Next

和这个:

For i = 0 To dateListDead.Count - 1
    For j = 0 To dateListNotMinggu.Count - 1
        If CDate(dateListNotMinggu(j)) = CDate(dateListDead(i)) Then
            dateListNotMinggu.RemoveAt(j)
            Exit For
        End If
    Next
Next

请注意,习惯上将其i用作循环计数器的第一个选项,然后j用作第一个嵌套循环,然后k用作第二个嵌套循环。仅在有充分理由的情况下才应使用其他东西。请记住,循环计数器并不代表列表中的值,而是代表其索引。这就是为什么你使用的index,而不是dd吃等。

编辑:

根据下面Jimi的评论,通常通过简单的LINQ查询来解决此问题。如果您使用的是LINQ,那么您肯定不会使用ArrayList而是List(Of Date)在这种情况下,代码如下所示:

dateListNotMinggu = dateListNotMinggu.Except(dateListDead).ToList()

如果您完全疯了,想使用LINQ,ArrayLists那么这将起作用:

dateListNotMinggu = New ArrayList(dateListNotMinggu.Cast(Of Date)().
                                                    Except(dateListDead.Cast(Of Date)()).
                                                    ToArray())

请注意,正如我在评论中回答的那样,使用LINQ会生成一个新列表,而不是更改现有列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从另一个数组列表中删除一个数组列表元素的最佳方法

从另一个数组中存在的Javascript数组中删除元素

删除另一个数组中存在的数组元素

删除另一个数组中的元素

通过与Java中的另一个数组进行比较,从对象列表中删除元素

找出另一个列表中不存在的数组列表的元素

排除另一个数组中的列表元素

从列表中打印第k个元素。列表将基于另一个数组中存在的数字获得

检查一个数组列表中的值是否存在于另一个数组列表中

迅捷3-从另一个数组中存在的数组中删除对象

如何从数组中删除元素,哪些元素是另一个数组?

根据另一个数组的空元素从数组中删除元素

多维数组将每个列表数组存储在另一个数组中

基于Javascript中的另一个数组删除数组中的元素

从猫鼬中另一个数组内部的数组中删除元素

检查一个数组中的元素是否存在于另一个数组中

如果存在于另一个数组中,则从一个数组中删除元素,并保持重复-NumPy / Python

从一个数组中删除存在于另一个数组中的项目?

使用isSame函数从momnet的另一个数组元素中删除一个数组元素

从一个数组中删除另一个数组中的元素

根据元素名称删除另一个列表中不存在的列表元素

如何通过在另一个数组中搜索来过滤列表中的数组?

仅显示存在于另一个数组中的数组元素

将一个数组列表中的值引用到另一个数组中的值

iOS快速从另一个数组中删除数组的元素

从另一个数组中删除数组元素

redux - 如何删除嵌套到另一个数组的数组中的元素

redux - 如何删除嵌套到另一个数组的数组中的元素

在另一个类中调用一个数组列表