如何检查数组中的所有值

时间:2018-12-12 20:23:46

标签: arrays vb.net

我创建了一个包含值0-2的多维数组,并且我需要一种遍历该数组的方法来检查值中的任意一个是否为1或2。数组中没有1或2,程序结束,但是我不确定如何检查每个元素。 我在下面添加了有问题的数组,但是当程序运行时,它将被值填充。

    Dim ownership = New Integer(7, 7) {{0, 0, 0, 0, 0, 0, 0, 0},
                                       {0, 0, 0, 0, 0, 0, 0, 0},
                                       {0, 0, 0, 0, 0, 0, 0, 0},
                                       {0, 0, 0, 0, 0, 0, 0, 0},
                                       {0, 0, 0, 0, 0, 0, 0, 0},
                                       {0, 0, 0, 0, 0, 0, 0, 0},
                                       {0, 0, 0, 0, 0, 0, 0, 0},
                                       {0, 0, 0, 0, 0, 0, 0, 0}}

有没有一种方法可以遍历数组以检查每个值的数量?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

如果您喜欢LINQ,则可以使用Any()方法检查数组是否包含 any > 0

Dim result As Boolean = ownership.OfType(Of Integer).Any(Function(v) v > 0)

如果result = True,则有值> 0

如果要引用所有具有值> 0的元素,则可以使用Where()条件来过滤数组:此 filter 将创建以下内容的集合满足条件的元素:

Dim FilterResult = ownership.OfType(Of Integer).
                             Select(Function(elm, idx) New With {elm, idx}).
                             Where(Function(arr) arr.elm > 0).ToArray()

此查询将返回所有具有值ToList()及其内部的索引(位置)的元素的数组(它可以是列表,使用ToArray()而不是> 0ownership数组。

注意
正如djv所评论的那样,LINQ查询使数组索引变平。
如果需要从1D到2D索引转换(使用LINQ没关系,可以在查询中使用平面索引),则可以使用此转换(或类似的方法):

Dim Position2D As (Row As Integer, Col As Integer) =
    (result1(0).idx \ (ownership.GetUpperBound(0) + 1),
     result1(0).idx Mod (ownership.GetUpperBound(1) + 1))

Dim ValueAt2DIndex = ownership(Position2D.Row, Position2D.Col)

答案 1 :(得分:0)

所以这应该有帮助

    Dim ownership(,) As Integer = {{0, 0, 0, 0, 0, 0, 0, 0},
                                   {0, 0, 0, 0, 0, 0, 0, 0},
                                   {0, 0, 0, 0, 0, 0, 0, 0},
                                   {0, 0, 0, 0, 0, 0, 0, 0},
                                   {0, 0, 0, 0, 0, 0, 0, 0},
                                   {0, 0, 0, 0, 0, 0, 0, 0},
                                   {0, 0, 0, 0, 0, 0, 0, 0},
                                   {0, 0, 0, 0, 0, 0, 0, 0}}

    Dim fndNZ As Boolean = False
    Dim ctZ As Integer = 0
    For x As Integer = ownership.GetLowerBound(0) To ownership.GetUpperBound(0)
        For y As Integer = ownership.GetLowerBound(1) To ownership.GetUpperBound(1)
            If ownership(x, y) <> 0 Then
                fndNZ = True
                Exit For
            Else
                ctZ += 1
            End If
        Next
        If fndNZ Then Exit For
    Next
    If fndNZ Then
        'exit program
    End If

还有很多,但可能会有所帮助。