在这网站http://www.qqgb.com/Program/VB/VBJQ/Program_177745.html阐述了二维数组排序一个例子.
其数据源
如:aa(0 to 2,0 to 3) 10   5   13    24 
3    55  43     2 
30   51  113   21  请问各位,aa(3,3)排序组合应该有几种组合.
例如:
按第1列排序结果 
3    55   43    2 
10    5   13   24 
30   51  113   21 
按第2列排序结果 
10    5   13   24 
30   51  113   21 
3    55   43    2  通过以上两种两组合分析,多维数组排也就是也就是多个一维数组排序的组合对吗??

解决方案 »

  1.   

    借助数据集进行排序,应用就是与目标差一点.
    Function CreatSelectionHeading(RstFiledsName As Variant) As ADODB.Recordset
      Dim rst As ADODB.Recordset
      Set rst = New ADODB.Recordset
      'For ii = 0 To UBound(RstFiledsName)
        With rst
          .Fields.Append RstFiledsName(0), adChar, 20, adFldIsNullable
          .Fields.Append RstFiledsName(1), adBSTR, , adFldMayBeNull
        End With
      'Next ii
      Set CreatSelectionHeading = rst
    End FunctionSub lls()
      Dim rst As ADODB.Recordset
      nn = Array("a1", "a2")
      Set rst = CreatSelectionHeading(nn)
      With rst
        .Open
        .AddNew
        .Fields(0) = "aaa1"
        .Sort = "a1 asc"
      End With
    End Sub
      

  2.   

    数据集方法
    Sub ls()
      Dim mArray(5) As Variant
      mArray(0) = Array(111, 2, "dfa")
      mArray(1) = Array(2, 2, "aaaa")
      mArray(2) = Array(44, 4, "pppp")
      mArray(3) = Array(44, 3, "ooo")
      mArray(4) = Array(1, 5, "ee")
      mArray(5) = Array(302, 5, "66")  Dim rst As ADODB.Recordset
      nn = Array("x", "y", "tempText")
      Set rst = CreatSelectionHeading(nn)
      With rst
        .Open
      ''
        For jj = 0 To UBound(mArray)
          .AddNew
          .Fields(0) = mArray(jj)(0)
          .Fields(1) = mArray(jj)(1)
          .Fields(2) = mArray(jj)(2)
        Next jj
        
      ''
        .Sort = ("x Asc ,y Asc")
        .MoveFirst
        For ii = 0 To .RecordCount - 1
          Debug.Print .Fields(0), .Fields(1), .Fields(2)
          .MoveNext
        Next ii
      End With
      
      Set rst = Nothing
    End Sub
    Function CreatSelectionHeading(RstFiledsName As Variant) As ADODB.Recordset
      Dim rst As ADODB.Recordset
      Set rst = New ADODB.Recordset
      'For ii = 0 To UBound(RstFiledsName)
        With rst
          .Fields.Append RstFiledsName(0), adDouble ', 20, adFldIsNullable
          .Fields.Append RstFiledsName(1), adDouble ', , adFldMayBeNull
          .Fields.Append RstFiledsName(2), adBSTR, , adFldMayBeNull    End With
      'Next ii
      Set CreatSelectionHeading = rst
    End Function
      

  3.   

    在autocad件号排序中的应用。
    Sub ls()
      Dim ConnectCad As New MyAcadEntity
      Dim sSet As AcadSelectionSet
      Dim Pt1, Pt2
      With ConnectCad
        Pt1 = .objModelDocument.Utility.GetPoint(, "Select First Point:")
        Pt2 = .objModelDocument.Utility.GetCorner(Pt1, "Select Corner Point:")
        Set sSet = .SelectConerSelectionSet(Pt1, Pt2)
      End With  Dim rst As ADODB.Recordset
      Dim objText As AcadText
      nn = Array("x", "y", "tempText")
      Set rst = CreatSelectionHeading1(nn)
      With rst
        .Open
        For ii = 0 To sSet.Count - 1 ''
          If sSet.Item(ii).ObjectName = "AcDbText" Then
            Set objText = sSet.Item(ii)
            .AddNew
              With objText
                rst.Fields(0) = .TextString
                rst.Fields(1) = .InsertionPoint(1)
                rst.Fields(2) = .Handle
              End With
          End If
        Next ii
      
      ''
        .Sort = ("y Desc")
        .MoveFirst
        For ii = 0 To .RecordCount - 1
          'Debug.Print .Fields(0), .Fields(1), .Fields(2)
          Set objText = ConnectCad.objModelDocument.HandleToObject(.Fields(2))
          objText.TextString = "4-" & 10 + ii
          .MoveNext
        Next ii
      End With
      
      Set rst = Nothing
    End Sub
    Function CreatSelectionHeading1(RstFiledsName As Variant) As ADODB.Recordset
      Dim rst As ADODB.Recordset
      Set rst = New ADODB.Recordset
      'For ii = 0 To UBound(RstFiledsName)
        With rst
          .Fields.Append RstFiledsName(0), adBSTR ', 20, adFldIsNullable
          .Fields.Append RstFiledsName(1), adDouble ', , adFldMayBeNull
          .Fields.Append RstFiledsName(2), adBSTR, , adFldMayBeNull    End With
      'Next ii
      Set CreatSelectionHeading1 = rst
    End Function