Vb.net 将1DPointArray转换为2DPointArray

Vb.net 将1DPointArray转换为2DPointArray,vb.net,math,Vb.net,Math,我启动了一个新项目,它以ini数据的方式加载和保存TileSet。 现在的问题是,它将分片加载到一个1d列表中,该列表被复制并排序到一个1d数组中 现在我尝试将这个排序的1d数组转换为2d数组 我的尝试: LoadedTiles.Sort(Function(p1, p2) (p1.Position.X.CompareTo(p2.Position.X))) LoadedTiles.Sort(Function(p1, p2) (p1.Position.Y.CompareTo(p2.Position.

我启动了一个新项目,它以ini数据的方式加载和保存TileSet。 现在的问题是,它将分片加载到一个1d列表中,该列表被复制并排序到一个1d数组中

现在我尝试将这个排序的1d数组转换为2d数组

我的尝试:

LoadedTiles.Sort(Function(p1, p2) (p1.Position.X.CompareTo(p2.Position.X)))
LoadedTiles.Sort(Function(p1, p2) (p1.Position.Y.CompareTo(p2.Position.Y)))
Dim currentArray(AmountTiles) As Tile
currentArray = LoadedTiles.ToArray
Dim lengthX, lengthY As Integer
Dim yAxis As Integer = currentArray(0).Position.Y
For Each p In currentArray
    If Not p.Position.Y = yAxis Then
        lengthX = (p.Position.X / p.Size.Width)
        lengthY = (currentArray(currentArray.Length - 1).Position.Y / p.Size.Width)
    Else
        lengthX = (currentArray(currentArray.Length - 1).Position.X / p.Size.Width)
        lengthY = 0
    End If
 Next
 MapTiles = New Tile(lengthX, lengthY) {}
 Dim ii As Integer
 For x = 0 To lengthX
    For y = 0 To lengthY
        MapTiles(x, y) = currentArray(ii)
        If Not ii >= currentArray.Length - 1 Then
            ii += 1
        End If
    Next
Next
这会产生错误的输出

见下图: 有可能把它做好吗?
非常感谢

1D数组中的
k
-th元素可以对应于行
i=k/N
和列
j=k%N
,其中
N
是列数。相反的是k=i*N+j好了,伙计们,我明白了(=

公开课表格1 Dim列表作为新列表(点的) 私有子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击

    List.Add(New Point(180, 360))
    List.Add(New Point(180, 180))
    List.Add(New Point(180, 540))


    'Convert 1d to 2d

    Dim count As Point = countXYAxis(List, 180)
    MsgBox(count.ToString)


    Dim p(count.X - 1, List.Count - 1) As Point

    MsgBox(p.Length)

    Dim rofl As Integer
    For i = 0 To p.GetUpperBound(0)
        For j = 0 To p.GetUpperBound(1)
            p(i, j) = List(rofl)
            If Not rofl >= List.Count - 1 Then
                rofl += 1
            End If
        Next
    Next

    For Each t In p
        MsgBox(t.ToString)
    Next
End Sub

Private Function countXYAxis(ByVal pt As List(Of Point), ByVal size As Integer) As Point
    Dim bufferY As New List(Of Integer)
    Dim cP As New Point

    For Each pts In pt
        If Not bufferY.Contains(pts.Y) Then
            bufferY.Add(pts.Y)
        End If
    Next
    For i = 0 To pt.Count - 1
        If pt(i).Y = bufferY(0) Then
        Else
            cP = New Point(pt(i).X / size, bufferY.Count)
        End If
    Next

    Return cP
End Function

结束类

Sry,但是;你是说1d数组的长度是N吗?Thx mate
N
是列数。
M
是行数,1d数组是
N*M