问题描述
假设我有一个矩阵A = [1 2 3; 4 5 6] 现在,我要检查是否存在5。答案应该是行和列,即 行= 1 列= 1 我试图找到但没有发现有用。
预先感谢
解决方法
对于多维数组,我们的选择不多。 一种方法是循环数组以获取元素索引,或尝试下面的代码(仅搜索的数字匹配)进行循环。
ReadOnly matrix(,) As Integer = New Integer(1,2) {{1,2,5},{4,5,6}}
Structure GridData
Dim Row As Integer
Dim Col As Integer
End Structure
Function FindIndexesOfNumber(searchedNr As Integer) As List(Of GridData)
Dim startIndex As Integer = 0
Dim enumerator As List(Of GridData) = (From elements In matrix).ToList.Where(Function(x) x.Equals(searchedNr)).Select(Function(x)
'fake select,it's only for the loop which find numbers
startIndex = Array.IndexOf(matrix.OfType(Of Integer)().ToArray(),searchedNr,startIndex + 1)
Dim matrixBound As Integer = matrix.GetUpperBound(1) + 1
Return New GridData With {
.Col = startIndex Mod matrixBound,.Row = (startIndex \ matrixBound)
}
End Function).ToList
For Each c In enumerator
Console.WriteLine(String.Format("Col: {0} Row: {1}",c.Col.ToString,c.Row.ToString))
Next
Return enumerator
End Function
用法:
Dim indexes As List(Of GridData) = FindIndexesOfNumber(5)
,
您可以尝试
Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
Dim a As Integer(,) = New Integer(,) {{0,1,2},{3,4,{6,7,8},{9,10,11},{12,13,14}}
Dim rw As Integer,cl As Integer
Dim xy As Integer = 13
If getXY(a,xy,rw,cl) = True Then
MessageBox.Show("Row: " & rw & " # Col: " & cl)
Else
MessageBox.Show("Not found")
End If
End Sub
Function getXY(arr As Array,findwhat As Object,ByRef row As Integer,ByRef col As Integer) As Boolean
Dim d = (From x In arr).ToList.IndexOf(findwhat)
If d = -1 Then Return False
row = Math.Ceiling((d + 1) / arr.GetLength(1)) - 1
col = d Mod arr.GetLength(1)
Return True
End Function