UDF-Sammlung Array Alternativen

  • Hi,
    nachdem ich bereits zum Dictionary-Objekt als Array-Pendent eine Funktionssammlung erstellt hatte, habe ich mich nun darangesetzt und auch die anderen Arrayalternativen in eine Sammlung aufgenommen. Damit alles komplett ist, habe ich hier nochmal die Dictionary-Funktionen mit erfaßt.


    Mein ausdrücklicher Dank gilt an dieser Stelle AspirinJunkie :thumbup:
    Durch seine gute Vorarbeit hier hat er mich zum Einen inspiriert und zum Anderen die Arbeit spürbar erleichtert 8o .
    Ohne seinen Beitrag hätte ich mich wahrscheinlich nicht so schnell mit diesen Varianten befaßt.


    Obwohl ich weitestgehend getestet habe, bin ich mir nicht ganz sicher ob noch Bugs versteckt sind ;-). Solltet ihr welche entdecken sagt mir bitte Bescheid. :whistling:


    Hier eine Auflistung aller Funktionen der Sammlung:



    Edit:
    Ich habe für das Objekt ArrayList eine weitere Funktion erstellt - _ObjAListAddColl()
    Damit lassen sich 1D-Arrays oder mit Delimiter getrennte Stringelemente der Arraylist hinzufügen.
    Die Funktion ist noch nicht in die .au3 eingefügt, deshalb hier der Quelltext:

  • Hmm, interessanter Aspekt.
    Ich deklariere zwar aus alter Gewohnheit alle Variablen, setze aber nicht die Option. :whistling:
    Nur ist mir der Mechanismus von MustDeclareVars nicht richtig klar.
    Eigentlich hatte ich das unterschwellig im Hinterkopf als ich in den Funktionen alle Variablen deklarierte.
    Wenn MustDeclareVars gesetzt ist, sollte es doch schauen ob alle Variablen deklariert sind und meckern, wenn es nicht der Fall ist.
    Hierbei müßte es also stumm bleiben... :wacko:

  • Hallo, BugFix,


    wahnsinn was Du für AutoIt geleistet hast! :thumbup: Ich arbeite nicht so lange mit AutoIt, aber ich finde ihn schon jetzt absolut geil!
    Und als alter Perl-Freund habe ich mich heute tierisch gefreut, als ich meinen geliebten Hash hier vorgefunden habe ;-)


    Ich vermisse aber eine Funktion, mit der man alle Schlüssel durchiterieren kann:


    z.B. _ObjHashGetKeys(Objekt)
    Gibt die Liste mit allen Schlüsseln zurück


    ... oder kann man es anders machen?


    Ich habe folgendes versucht:


    #include <UDF_ArrayAlternatives.au3>
    $myhash = _ObjHashCreate()
    $myhash.Add("a", 1)
    $myhash.Add("b", 2)
    $keys = ObjCreate("System.Collections.ArrayList")
    $keys = $myhash.Keys;


    ... geht nicht ! (aber dabei hat $keys.count den Wert 2 !)


    Mache ich was falsch?


    Danke noch mal für die tolle UDF-Sammlung, und auch an AspirinJunkie! :thumbup:


    Grüße,
    Alex

    Einmal editiert, zuletzt von abadonna ()

  • Tja, an der Stelle bin ich auch hängegeblieben, dadurch konnte ich keine derartige Funktion implementieren. Einziger Workaround derzeit: Die Keys parallel in einer Arraylist führen.


    Das Problem ist folgendes:
    .Keys liefert eine ICollection zurück. Das Objekt wird ordnungsgemäß erstellt und enthält laut .Count auch alle Elemente. Aber diese Collection reagiert scheinbar auf keine weitere Methode. Weder For $element In $oICol noch andere Versuche waren erfolgreich.
    Vielleicht findet ja jemand mit mehr Objekterfahrung eine Lösung.

  • Zitat von 'MSDN&quot;

    Die zurückgegebene ICollection ist keine statische Kopie, sondern die ICollection verweist zurück auf die Schlüssel in der ursprünglichen Hashtable.

    Das wird das Problem sein.
    Es sind keine Strings enthalten sondern Pointer.
    Ob die überhaupt in AutoIt verwendbar sind - keine Ahnung.


    Workaround: Nimm statt einer Hash-Table ein Dictionary das ist von der Bedienung her gleich und sollte auch flotter arbeiten, zumindestens wenn man nicht gerade tausende von Einträgen da drin führt.
    Erst dann sollte eine Hash-Table paar Vorteile ausspielen können.