Page 1 sur 1
[R] Scripting.Dictionary key <=> item
Posté : jeu. 31 juil. 2014 14:40
par walkson
Bonjour,
En utilisant Scripting.Dictionary, on retrouve l'item d'une key. Mais peut on retrouver la key d'un item ?
Ci dessous un exemple comprenant mon problème (merci à Orax à qui j'ai emprunté l'exemple)
► Afficher le texte
Code : Tout sélectionner
;~ http://msdn.microsoft.com/en-us/library ... 84%29.aspx
#include <Array.au3>
$LePetitRobert = ObjCreate("Scripting.Dictionary")
_c(IsObj($LePetitRobert))
$LePetitRobert.add("vache", "meuuuh")
$LePetitRobert.add("oiseau", "cuicui")
$LePetitRobert.add("silence !!", "...")
MsgBox(0,"",$LePetitRobert.Item("oiseau"))
MsgBox(0,"",$LePetitRobert.Key("meuuuh")) ;pas de retour echec
for $item In $LePetitRobert
_c($item)
Next
_c("------")
_c($LePetitRobert.Item("vache"))
_c($LePetitRobert.Item("silence !!"))
_c($LePetitRobert.Item("oiseau"))
_c($LePetitRobert.Key("...")) ;pas de retour echec
Func _c($str)
ConsoleWrite(">>" & $str & @CRLF)
EndFunc
$aa = $LePetitRobert.keys
$bb = $LePetitRobert.items
Local $cc[$LePetitRobert.Count][2]
For $i = 0 To $LePetitRobert.Count - 1
$cc[$i][0] = $aa[$i]
$cc[$i][1] = $bb[$i]
Next
_ArrayDisplay($cc)
$key = "oiseau"
If $LePetitRobert.exists($key) Then
MsgBox(0,"","key " & $LePetitRobert.exists($key))
Else
MsgBox(0,"","key " & $LePetitRobert.exists($key))
EndIf
Merci...
Re: [..] Scripting.Dictionary key <=> item
Posté : jeu. 31 juil. 2014 16:02
par jchd
Non, il faut balayer le tout. Les Maps ont les mêmes caractéristiques.
Re: [..] Scripting.Dictionary key <=> item
Posté : jeu. 31 juil. 2014 16:14
par walkson
Dommage ! merci pour la réponse
jchd a écrit :Les Maps ont les mêmes caractéristique
Qu'est ce ? A part google maps ou drive map, je n'ai rien trouvé d'approchant.
Re: [..] Scripting.Dictionary key <=> item
Posté : jeu. 31 juil. 2014 17:29
par mikell
jc ya un truc que je ne comprends pas
Microsoft dit
ici
Key Property : sets a key in a Dictionary object.
object.Key(key) = newkey
Remarks : If key is not found when changing a key, a new key is created and its associated item is left empty.
Mais dans ce code, si j'essaie d'attribuer un nom à une clé qui n'existe pas, ben ça crée pô de nouvelle clé
► Afficher le texte
Code : Tout sélectionner
#Include <Array.au3>
$sd = ObjCreate("Scripting.Dictionary")
$sd.add("vache", "meuuuh")
$sd.add("oiseau", "cuicui")
$sd.add("silence !!", "...")
$sd.add("chèvre", "")
$sd.Key("chèvre") = "mouton" ; <= là ça marche parce que la clé existe
Msgbox(0, "", "chèvre>mouton : " & $sd.Exists("mouton")) ; <= la clé est bien renommée
$asd1 = _list($sd)
_ArrayDisplay($asd1, "$asd1")
$sd.Remove("mouton")
$sd.Key("cochon") = "mouton" ; <= marche pas
Msgbox(0, "", "cochon>mouton : " & $sd.Exists("mouton")) ; <= la clé n'existe pas et n'est pas créée
$asd2 = _list($sd)
_ArrayDisplay($asd2, "$asd2")
Func _list($dico)
Local $keys = $dico.Keys
Local $items = $dico.Items
Local $count = $dico.Count
Local $ret[$count+1][2]
$ret[0][0] = $count
For $i = 1 To $count
$ret[$i][0] = $keys[$i-1]
$ret[$i][1] = $items[$i-1]
Next
Return $ret
EndFunc
Re: [..] Scripting.Dictionary key <=> item
Posté : jeu. 31 juil. 2014 17:57
par jchd
walkson,
Une nouveauté disponible dans la beta qui va bientôt sortir en stable.
mikell,
En effet, mais ce n'est pas la première fois qu'on nous raconte des histoires.
Re: [..] Scripting.Dictionary key <=> item
Posté : ven. 01 août 2014 12:44
par walkson
Bonjour,
Une dernière question:
En terme d'efficacité (temps, cpu, ram), Scripting.Dictionary est préférable ou non à un array 2D ? (mise en mémoire des variables et recherche de données)
Re: [..] Scripting.Dictionary key <=> item
Posté : ven. 01 août 2014 13:04
par jchd
Il est difficile de statuer en général. Ainsi, une Map ou objet SD seront plus efficaces pour la recherche clé -> valeur et lorsqu'on doit aggrandir périodiquement la taille d'un conteneur. Par contre l'accès sur index y est impossible (l'ordre n'est pas garanti) et la dimension du conteneur est fixée à 2 (clé, valeur) pour les SD ou est variable dynamiquement pour les Maps, donc les tableaux offrent d'autres possibilités.
Ce sont des conteneurs complémentaires.
Jon envisage l'assignation par référence pour les Maps et, éventuellement, pour les tableaux. Pour les Maps, ça nous fournirait un conteneur générique permettant l'implémentation de relations, ce que l'assignation par copie ne permet pas actuellement. Pour les tableaux, une étude préliminaire montre que l'assignation systématique par référence ne casserait que peu de code et surtout du code mal écrit ; à voir en pratique.
Re: [..] Scripting.Dictionary key <=> item
Posté : ven. 01 août 2014 13:23
par walkson
Merci pour la réponse (rapide)
Re: [..] Scripting.Dictionary key <=> item
Posté : ven. 01 août 2014 23:18
par jchd
mikell a écrit :jc ya un truc que je ne comprends pas
Microsoft dit
ici
Key Property : sets a key in a Dictionary object.
object.Key(key) = newkey
Remarks : If key is not found when changing a key, a new key is created and its associated item is left empty.
Réponse de Jon :
.Key() never existed. There's .Keys() which returns all the keys.
Son implémentation des Maps n'utilise pas les objets MS, tout simplement.
Par contre, cette méthode doit fonctionner avec un ScriptingDictionary.
Re: [R] Scripting.Dictionary key <=> item
Posté : dim. 03 août 2014 01:04
par walkson
Ce que j"aime chez JC, c'est sa qualité de Pro.