Fragen zu Dictionary und Hashtable Obj

  • Sry für den schwachen Titel sind ein paar Fragen.

    Ziel:
    Einen Namen suchen und zugehörige Wert(e) ausgeben. Also so was wie ne Array und dann _ArraySearch nur ist das extremst langsam.

    Infos:
    Werte sind immer Strings
    Grössenordnung 1'000'000 Werte
    Wenn möglich mehrere Werte
    Es muss nur in eine "Richtung" funktionieren
    Bsp.

    Pizza = Essen&Grundnahrungsmittel&NichtVegi

    Es wird z.b. "Pizza[1]" gesucht und zurück kommt "Essen"
    Umgekehrt also z.b. Suchen nach "Grundnahrungsmittel" muss nicht möglich sein.

    Bsp. in AutoIt

    [autoit]

    #include <Array.au3>
    Global $oDictionary = ObjCreate("Scripting.Dictionary")

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To 99
    $oDictionary("Pizza" & $i) = "Essen&Grundnahrungsmittel&NichtVegi"
    Next

    [/autoit][autoit][/autoit][autoit]

    $a = StringSplit($oDictionary("Pizza33"), "&") ;Suchen nach Pizza33
    _ArrayDisplay($a)

    [/autoit]

    Fragen:
    Gibt es eine sinnvollere Möglichkeit als alle Werte zu einem String zu verknüpfen und dann für die Ausgabe zu splitten? So was wie bei Arrays mehrere Cols.
    Macht das ganze als Scripting.Dictionary oder als System.Collections.Hashtable mehr Sinn?
    Wie kann ich das Objekt speichern als File und später wieder einlesen. Die Variable $oDictionary enthält keine nutzbaren Daten das ist ka ein Objekt Handle/Pointer oder so was. :huh:

    TIA

    • Offizieller Beitrag

    Grössenordnung 1'000'000 Werte


    Na da solltest du lieber zu einer kleinen Datenbank greifen. SQLite bietet sich an. Tipp: Speichere dir die SQLite.dll im Ordner deines Skriptes, sonst braucht dein Skript Internetzugang und autoitscript.com darf auch nicht gerade down sein. :whistling:

    Ich würde die Tabelle so erstellen:

    [autoit]

    $sExecute = _
    "CREATE TABLE IF NOT EXISTS [begriffe] (" & _
    "[name] TEXT," & _
    "[detail_1] TEXT," & _
    "[detail_2] TEXT," & _
    "[detail_3] TEXT);"

    [/autoit]

    Nun kannst du mit SELECT die gewünschten Details abfragen.