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?

我认为“array[3]”行是错误的,但我想我已经读到这应该删除数组单元格。

删除数组单元格的正确方法是什么?它取决于对象类型吗?(字符串、数字、对象)

或者

可以操纵 UpperBound 值使其发挥作用吗?

IE。删除第 3 项后,我希望 UpperBound 或数组长度为 2,因为这在逻辑上是正确的。

有帮助吗?

解决方案

对于可变大小数组,当您为其赋值时,就会为该数组分配内存。UpperBound 返回当前脚本中为数组定义的最大值. 。但是,您可以使用另一个动态数组来实现这一点。

string array2[]
int i

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

array = array2

那么 UpperBound(array[]) 将减 1。

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

其他提示

Powerbuilder中并没有真正有内置在任何好的阵列操作函数(即我知道的)。

您可以实现你试图通过复制要保留到一个新的无界数组中的值做。

例如

int i
string array3[] = {'Item 1', 'Item 2', 'Item 3'}, array2[]

for i = 1 to 2
    array2[i] = array3[i]
next
UpperBound(array2[]) // = 2

:简单地通过整个阵列复制到新的更小,有限阵列像这样这样更能做到 -

在您的例子只卸下最新值

string array3[] = {'Item 1', 'Item 2', 'Item 3'}, array2[2]

array2 = array3
UpperBound(array2[]) // = 2

当我在写丹的回答评论我开始思考我做什么用的,因为我不喜欢PFC的名单。我用的是数据存储,其中,如果你认为它正确的方式,就像是对类固醇的列表。

而不是复制阵列,如果需要跟踪的改变的上限的阵列(例如,如果你想使用它作为类似的叠层),为什么不保持一个单独的整数变量,指示最后一个真正的元素的索引?似乎很多比上述建议的解决方案复制更简单,更高效!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top