Question

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?

Je pense que la ligne « tableau [3] » est faux, mais je pense que je l'ai lu que cela devrait enlever la cellule de tableau.

Quelle serait la bonne façon de supprimer une cellule de tableau? Cela dépend-il du type d'objet? (String vs vs Nombre objet)

ou

Peut-on manipuler la valeur UpperBound pour le faire fonctionner?

i.e.. après le retrait de l'article 3, je veux que le UpperBound ou arraylength, être 2, puisque c'est logiquement correct.

Était-ce utile?

La solution

pour les tableaux de taille variable, la mémoire est allouée pour le tableau lorsque vous attribuez des valeurs à elle. UpperBound retourne la plus grande valeur qui a été définie pour le tableau dans le script en cours . Cependant, vous pouvez faire le tour en utilisant un autre tableau dynamique.

string array2[]
int i

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

array = array2

Ensuite UpperBound (tableau []) sera réduit de 1.

Cela fonctionne pour UpperBound (array []) -. 1> 2 car powerbuilder alloue par la taille de la mémoire par défaut de 3 éléments quand un tableau dynamique est déclarée

Autres conseils

Powerbuilder n'a pas vraiment de bonnes fonctions de manipulation de tableaux construits (que je connais).

Vous pouvez obtenir ce que vous essayez de faire en copiant les valeurs que vous souhaitez conserver à un nouveau tableau sans bornes.

Par exemple

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

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

Dans votre exemple, vous supprimez uniquement la dernière valeur - cela peut être fait encore plus simplement en copiant tout le tableau à un nouveau plus petit, un tableau délimité comme ceci:

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

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

Quand j'écris un commentaire pour la réponse de Dan, je commencé à penser à ce que je ne l'utilise, depuis que je n'aime pas les listes de PFC. Ce que j'utilise un magasin de données, qui, si vous pensez à la bonne façon, est comme une liste sur les stéroïdes.

Au lieu de copier le tableau, si vous avez besoin de garder une trace d'un changeant la limite supérieure du tableau (par exemple, si vous essayez d'utiliser quelque chose comme une pile), pourquoi ne pas simplement garder une variable entière séparée indiquant l'index du dernier élément réel? Il semble beaucoup plus simple et plus efficace que les solutions de copie proposées ci-dessus!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top