【问题标题】:BBC Basic Add an array to another arrayBBC Basic 将一个数组添加到另一个数组
【发布时间】:2019-06-20 21:10:56
【问题描述】:

我正在尝试将数组添加到主要使用 ARRAYLIB 的数组中。到目前为止,我所做的一切都没有用

INSTALL @lib$ + "ARRAYLIB"
DIM ARRAY1(0)
DIM ARRAY2(3)
LET ARRAY2() = 1, 2, 3, 4

ARRAY1 是主数组,其中 ARRAY2 是我要附加到 ARRAY1 的数组。这就是我陷入困境的地方,因为我尝试过的一切都没有奏效。

PROC_add(ARRAY1(), ARRAY2())
PROC_add(ARRAY1(), (ARRAY2(0), ARRAY2(1), ARRAY2(2), ARRAY2(3))
PROC_add(ARRAY1(), ARRAY2(0), ARRAY2(1), ARRAY2(2), ARRAY2(3)

【问题讨论】:

    标签: arrays basic


    【解决方案1】:

    Proc_add 不会像您期望的那样附加数组。它将标量值添加到数组的所有元素。

     INSTALL @lib$ + "ARRAYLIB"
     DIM ARRAY(3)
     LET ARRAY() = 1, 2, 3, 4
     PROC_add(ARRAY(), 1) 
    
     DIM N% 0
     FOR N%=0 TO 3
       PRINT ARRAY(N%)
     NEXT
    

    会产生类似的输出

    2
    3
    4
    5
    

    为了追加两个数组,您需要创建第三个数组并将两个数组复制到其中。

      DIM ARRAY1(0)                  ; 1 element
      DIM ARRAY2(3)                  ; 4 elements
      LET ARRAY2() = 1, 2, 3, 4
    
      N1% = DIM(ARRAY1(),1)          ; N1% = 0
      N2% = DIM(ARRAY2(),1)          ; N2% = 3
      DIM ARRAY3(N1%+N2%+1)          ; 5 elements
    
      FOR N% = 0 TO N1%              ; FOR N% = 0 TO 0
        ARRAY3(N%) = ARRAY1(N%)
      NEXT
    
      FOR N% = N1% TO N1%+N2%        ; FOR N% = 0 TO 3 
        ARRAY3(N%+1) = ARRAY2(N%)       
      NEXT
    
      FOR N%=0 TO N1%+N2%+1
        PRINT ARRAY3(N%)             ; Prints 0,1,2,3,4
      NEXT
    

    或者您可以编写自己的连接过程,如下所示:

      DIM ARRAY1(0)
      DIM ARRAY2(3)
      LET ARRAY2() = 1, 2, 3, 4
    
      PROC_Concat(ARRAY1(), ARRAY2(), ARRAY3())
    
      FOR N% = 0 TO 4
        PRINT ARRAY3(N%)
      NEXT
    
      END
    
      DEF PROC_Concat(A1(), A2(), RETURN A3())
      LOCAL N1%, N2%
      N1% = DIM(A1(), 1)
      N2% = DIM(A2(), 1)
      DIM A3(N1%+N2%+1)
      SYS "RtlMoveMemory", ^A3(0), ^A1(0), 10*(N1%+1)
      SYS "RtlMoveMemory", ^A3(N1%+1), ^A2(0), 10*(N2%+1)
      ENDPROC
    

    【讨论】:

    • 我想 upvote 这个答案,但第二个 sn-p 是错误的。请编辑以包含正确的代码。在 cmets 中写所有这些会很麻烦!
    • 谢谢@SepRoland。我想我纠正了你指出的错误。
    • 这一次代码确实会产生想要的结果但这只是因为N1%恰好为零。 (ARRAY1 只有 1 个元素)。验证如果第一个数组有更多元素会发生什么!这是正确的第二个 FOR-NEXT 循环:FOR N% = 0 TO N2%ARRAY3(N1%+1+N%) = ARRAY2(N%)NEXT
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2021-12-10
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多