使用字典和排序计算行列.bas 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. Private Type Coordinate
  2. x As Double
  3. y As Double
  4. End Type
  5. Sub 计算行列() ' 字典使用计算行列
  6. ActiveDocument.Unit = cdrMillimeter
  7. Set xdict = CreateObject("Scripting.dictionary")
  8. Set ydict = CreateObject("Scripting.dictionary")
  9. Dim dot As Coordinate
  10. Dim s As Shape, ssr As ShapeRange
  11. Set ssr = ActiveSelectionRange
  12. For Each s In ssr
  13. dot.x = s.CenterX: dot.y = s.CenterY
  14. If xdict.Exists(Int(dot.x)) = False Then xdict.Add Int(dot.x), dot.x
  15. If ydict.Exists(Int(dot.y)) = False Then ydict.Add Int(dot.y), dot.y
  16. Next s
  17. Dim keys() As Variant
  18. keys = xdict.keys
  19. ' 使用 Sort 函数对数组进行排序
  20. ArraySort keys
  21. ' 遍历排序后的键,并按照键的顺序访问字典中的元素
  22. Dim key As Variant
  23. For Each key In keys
  24. Debug.Print key, xdict(key)
  25. Next key
  26. Debug.Print "字典使用计算行列:" & xdict.Count, ydict.Count
  27. End Sub
  28. '// 对数组进行排序[单维]
  29. Public Function ArraySort(src As Variant) As Variant
  30. Dim out As Long, i As Long, tmp As Variant
  31. For out = LBound(src) To UBound(src) - 1
  32. For i = out + 1 To UBound(src)
  33. If src(out) > src(i) Then
  34. tmp = src(i): src(i) = src(out): src(out) = tmp
  35. End If
  36. Next i
  37. Next out
  38. ArraySort = src
  39. End Function