Aller au contenu

Gambas 3/Gambas3LeLangage/Les collections

Un livre de Wikilivres.

Les collections

[modifier | modifier le wikicode]

Jusqu'à maintenant, nous avions utilisé des types simples : des valeurs ayant un type.

Petite révolution : nous allons commencer à utiliser des objets !

Une collection est un objet et pour pouvoir utiliser un objet, il faut qu'il existe. Il faut donc créer une nouvelle instance de collection avec le mot New.

Sans cela, l'objet n'existe pas et rien ne fonctionne !

Revenons à notre sujet :

Une collection et un conteneur, une liste d'éléments.

Chaque élément a une clé de type String et une valeur de type Variant. Le type Variant est un type qui peut contenir n'importe quel autre type. En gros, vous mettez la valeur que vous voulez !

Le code ci-dessous est une démonstration d'utilisation d'une liste générique.

' Gambas module file

Public Sub Main()

  Dim colItem As Variant
  Dim colItems As Collection
  colItems = New Collection
  
  ' syntax
  colItems.Add("some text", CStr(colItems.Count))
  colItems.Add(True, CStr(colItems.Count))
  colItems.Add(18, CStr(colItems.Count))
  colItems.Add(200.45, CStr(colItems.Count))
  colItems.Add(Now, "custom")
  
  colItems.Remove("0")
  
  For Each colItem In colItems
    Print colItems.Key
    Print colItem
  Next
  Print colItems.Count
  
  colItems.Clear()
  Print colItems.Count
  
  colItems = Null
  
End

Il y a plus d'informations sur le wiki officiel ici et ici si nécessaire.

En particulier, la syntaxe pour saisir une collection en ligne améliore le code (voir ci-dessous) et les performances :

  Dim colItems As Collection

  ' inline syntax:
  colItems = [
    "0": "some text",
    "1": True,
    "2": 18,
    "3": 200.45,
    "custom": Now
  ]


Au début de votre apprentissage, je vous conseille d'utiliser uniquement les collections. Si vous en ressentez le besoin, vous pouvez aussi utiliser les tableaux dynamiques.

Les tableaux dynamiques

[modifier | modifier le wikicode]

Lorsque tous les objets stockés ont le même type et si vous n'avez pas besoin de clé pour identifier un élément, vous pouvez utiliser un tableau dynamique.

Le fonctionnement est légèrement différent car il n'y a pas de clé de type String mais il y a un index typé Integer. La tableau évoluant dynamiquement, un élément ne conservera PAS son index initial.

Vous pouvez consulter les informations sur le wiki officiel ici, ici et ici si nécessaire.

Autres structures de données

[modifier | modifier le wikicode]

Il existe d'autres structures de données. En cas de besoin, je vous invite à regarder la documentation du module gb.data. En guise d'exemple, les piles ou queues, le Radix tree, le Heap, l'AVL tree ont été portés sur Gambas.

Il faudra créer une collection personnalisée si votre programme nécessite des tris sur votre collection, des fonctions de recherche, etc.