:::info 并不是很通用,但很多地方会有此用法,如下代码就很神奇了,哈哈哈哈哈 :::

    1. /// Description: 多维数组转为List, 只能循环最后一个节点
    2. /// Input: pMultiData 多维数组数据, 如 aaa("cat",1)=222
    3. /// pNode(不允许为空) 节点位置, 第一级节点为要循环的, 则不给值
    4. /// Debug: w $lts(##class(PHA.COM.Util).Multi2List(.aaa, "a", "b", "c"), "^")
    5. ClassMethod Multi2List(ByRef pMultiData, pNode...)
    6. {
    7. s ret = ""
    8. s index = ""
    9. if ($g(pNode) = ""){
    10. for {
    11. s index = $o(pMultiData(index), 1, data)
    12. q:(index = "")
    13. d SetMulti2List
    14. }
    15. }
    16. if (pNode = 1){
    17. for {
    18. s index = $o(pMultiData(pNode(1), index), 1, data)
    19. q:(index = "")
    20. d SetMulti2List
    21. }
    22. }
    23. if (pNode = 2){
    24. for {
    25. s index = $o(pMultiData(pNode(1), pNode(2), index), 1, data)
    26. q:(index = "")
    27. d SetMulti2List
    28. }
    29. }
    30. if (pNode = 3){
    31. for {
    32. s index = $o(pMultiData(pNode(1), pNode(2), pNode(3), index), 1, data)
    33. q:(index = "")
    34. d SetMulti2List
    35. }
    36. }
    37. if (pNode = 4){
    38. for {
    39. s index = $o(pMultiData(pNode(1), pNode(2), pNode(3), pNode(4), index), 1, data)
    40. q:(index = "")
    41. d SetMulti2List
    42. }
    43. }
    44. if (pNode = 5){
    45. for {
    46. s index = $o(pMultiData(pNode(1), pNode(2), pNode(3), pNode(4), pNode(5), index), 1, data)
    47. q:(index = "")
    48. d SetMulti2List
    49. }
    50. }
    51. q ret
    52. SetMulti2List
    53. q:(index = "")
    54. s ret = ret _ $lb(data)
    55. q
    56. }
    DHC-APP>zw calcData
    calcData("a","b",1)="yyy"
    calcData("a","b",2)="hhh"
    calcData("a","b",3)="bbb"
    calcData("a","c",2)="XXX"
    
    DHC-APP>w $lts(##class(PHA.COM.Util).Multi2List(.calcData, "a", "b"), "^")
    yyy^hhh^bbb