我创建了一个包含值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}}
有没有一种方法可以遍历数组以检查每个值的数量?任何帮助将不胜感激!
答案 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()
而不是> 0
) ownership
数组。
注意:
正如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
还有很多,但可能会有所帮助。