L'interface
xMap permet de décrire une map (relation entre clés et valeurs).
L'interface
XEnumerableMap étend
XMap avec la possibilité d'énumération (
XElementAccess)
Le service
EnumerableMap fournit l'implémentation de l'interface.
voir la doc de l'API pour les types de clés et de valeurs
Pour faire simple : cela permet de créer des ARRAY évolués : clé1, valeur1 ; clé2, valeur2 ; ...
La possibilité d'énumération permet de rechercher une valeur à partir de sa clé (
.get) au lieu de balayer l'ARRAY à la recherche de la clé.
Dans le code d'
Hubert Lambert,
Code : Tout sélectionner
em = com.sun.star.container.EnumerableMap.create("string","[]string")
Création du container.
Code : Tout sélectionner
em.put("A", array("Albert","Annie"))
em.put("B", array("Bernard", "Béatrice"))
em.put("C", array("Christophe", "Cécile"))
em.put("D", array("Dominique", "Didier"))
Création de chaque couple clé/valeur, la valeur associé est un ARRAY
Récupération de la valeur associée à la clé "B"
S'agissant d'un ARRAY, balayage des éléments de l'ARRAY.
L'approche de
bm sur le forum anglophone permet de découvrir d'autres possibilités
Code : Tout sélectionner
enu = .createKeyEnumeration(False)
Do While enu.hasMoreElements
elem = enu.nextElement
MsgBox("Key : " & elem, 0, "createKeyEnumeration")
Loop
permet d'accéder à la clé
Code : Tout sélectionner
enu = .createValueEnumeration(False)
Do While enu.hasMoreElements
elem = enu.nextElement
MsgBox("Value : " & elem, 0, "createValueEnumeration")
Loop
permet d'accéder à la valeur
Code : Tout sélectionner
enu = .createElementEnumeration(False)
Do While enu.hasMoreElements
elem = enu.nextElement
MsgBox("Key : " & elem.First & _
chr(10) & "Value : " & elem.Second, 0, "createElementEnumeration")
Loop
permet d'accéder au couple clé (
elem.First) / valeur (
elem.Second)
Adapté au code de Hubert Lambert, cela pourrait donner
Code : Tout sélectionner
Sub Main
Dim enu AS Object, elem, aNom()
em = com.sun.star.container.EnumerableMap.create("string","[]string")
em.put("A", array("Albert","Annie"))
em.put("B", array("Bernard", "Béatrice"))
em.put("C", array("Christophe", "Cécile"))
em.put("D", array("Dominique", "Didier"))
enu = em.createElementEnumeration(False)
Do While enu.hasMoreElements
elem = enu.nextElement
aNom = elem.Second
MsgBox("Key : " & elem.First & chr(10) & "Value : " & aNom(0) & " - " & aNom(1), 0, "createElementEnumeration")
Loop
End Sub
Sachant que dans l'exemple, l'ARRAY n'a que deux éléments, j'accède directement à aNom(0) et aNom(1). Un truc plus fiable serait de déterminer UBOUND.
Ici, il s'agit d'une approche simple, voire simpliste, mais qui permet d'entrevoir des possibilités intéressantes, entre autres au niveau performances.