Powerbuilder动态阵列操作

gla*_*snt 8 powerbuilder upperbound

string array[]
long lBound, uBound

lBound = LowerBound(array[]) // = 1, empty array value
uBound = UpperBound(array[]) // = 0, empty array value

array[1] = 'Item 1'
array[2] = 'Item 2'
array[3] = 'Item 3'

lBound = LowerBound(array[]) // = 1
uBound = UpperBound(array[]) // = 3

array[3] = '' //removing item 3

lBound = LowerBound(array[]) // = 1, still
uBound = UpperBound(array[]) // = 3, still (but array[3] is nulled?
Run Code Online (Sandbox Code Playgroud)

我认为'array [3]'这行是错误的,但我想我已经读过这应该删除数组单元格了.

删除阵列单元的正确方法是什么?它取决于对象类型吗?(String vs Number vs Object)

要么

可以操纵UpperBound值使其工作吗?

即在删除第3项之后,我希望UpperBound或arraylength为2,因为这在逻辑上是正确的.

Geo*_*tas 9

对于可变大小的数组,在为其指定值时会为该数组分配内存.UpperBound返回当前脚本中为数组定义的最大值.但是,您可以使用其他动态数组来完成这一操作.

string array2[]
int i

for i = 1 to UpperBound(array[]) - 1
    array2[i] = array[i]
next

array = array2
Run Code Online (Sandbox Code Playgroud)

然后UpperBound(array [])将减少1.

这适用于UpperBound(array []) - 1> 2,因为当声明动态数组时,powerbuilder默认为3个元素分配内存大小.