Array auf Element prüfen

  • VBScript

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Array auf Element prüfen

    Hallo zusammen,

    wer könnte mir bitte bei meinem Problem mit einem Skript helfen? ?( ?(

    Ich möchte ein Array auf Elemente eines anderen Arrays prüfen und falls ein Element aus dem zweiten Array im ersten Array nicht vorhanden ist, soll dieses dem ersten Array hinzugefügt werden. Falls vorhanden, soll dieses nicht hinzugefügt werden. Wie könnte ich ich das am besten umsetzen? Ich weiß nicht mal, wie ich anfangen soll.. :S Oder vielleicht andersherum, wie prüfe ich, ob ein Element, z.B. irgendeine Benennung (eine Automarke, z.B. "BMW") in einem Array vorhanden ist? Und wenn dieses Element dort nicht vorhanden ist, dann soll diese Automarke einem Array mit den Automarken hinzugefügt werden?

    Für jede Hilfe, jeden Hinweis bin ich euch sehr dankbar!
    Wieviel hast Du schon programmiert? Letztenendes wäre es eine doppelte Schleife; die äußere Dein 1. Array, die Innere das Vergleichsarray.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @~blaze~: Auf welchem Entwicklungsstand ist VBScript? "Kann" es hashsets oder spekulierst Du auf Zusammenarbeit mit einer bisher vom TE ungenannten Software?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Danke sehr für die Antwort!

    VaporiZed schrieb:

    Wieviel hast Du schon programmiert? Letztenendes wäre es eine doppelte Schleife; die äußere Dein 1. Array, die Innere das Vergleichsarray.


    Ich bin ein absoluter Anfänger..

    Nun habe ich folgendes versucht:


    For Each objElementArray1 in Array1
    for each objElementArray2 in Array2
    if objElementArray1 <> objElementArray2 Then
    Redim preserve Array1(objElementArray1)
    Else
    Next
    Next


    Aber ich vermute, das ist falsch, weil es bei mir nicht funktioniert :) Würd mich echt freuen, wenn ihr mir bitte weiterhelfen könntet? ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „pramort“ ()

    Langsam. Wo bist Du programmiertechnisch gerade unterwegs? Getaggt hast Du den Thread mit VBScript. Formatiert hast Du nun Deinen Code als VB.Net. Bastelst Du an einem VBScript, z.B. mit VbsEdit oder arbeitest Du mit Visual Studio oder womit?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hier erstmal die Doppelschleifenvariante. Muss ehrlich zugeben, dass ich den Sprachumfang von VBS nicht so gut kenne. Das mit dem Dictionary von ~blaze~ ist natürlich viel effizienter.

    Visual Basic-Quellcode

    1. Dim FruitArray
    2. FruitArray = Array("Apple","Orange","Grapes")
    3. Dim BreakfastArray
    4. BreakfastArray = Array("Eggs","Juice","Grapes","Cornflakes")
    5. Dim AlreadyKnown
    6. For Each Fruit In FruitArray
    7. AlreadyKnown = False
    8. For Each Part In BreakfastArray
    9. If Part = Fruit Then
    10. AlreadyKnown = True
    11. Exit For
    12. End If
    13. Next
    14. If Not AlreadyKnown Then
    15. Redim Preserve BreakfastArray(UBound(BreakfastArray) + 1)
    16. BreakfastArray(UBound(BreakfastArray)) = Fruit
    17. End If
    18. Next
    19. For Each Part In BreakfastArray
    20. MsgBox(Part)
    21. Next

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Guten Morgen

    Ich kenne mich mit VBScript nicht sonderlich gut aus. Daher kenne ich auch nicht all die Möglichkeiten von VBScript.

    Ich könnte mir aber vorstellen, dass die konventionelle Methode, also das durchiterieren durch die Array und gleichzeitiges Vergleichen der Werte möglich ist.

    Je nachdem was für Werte in der Array sind, kann das mit einer xor-Berechnung gemacht werden.

    Das Vergleichen von 2 Zahlen: 5 xor 5 = 0
    Das Vergleichen von Strings: Asc("a") xor Asc("a") = 0

    Sofern es sich um Objekte handelt, die in der Array sind, muss je nach komplexität, eine tiefer oder oberflächlicher Vergleich gemacht werden.


    Freundliche Grüsse

    exc-jdbi
    @exc-jdbi: Stringvergleich würd ich das jetzt nicht nennen. Eher Charvergleich, da nur das erste Zeichen verglichen wird. Asc("asd") Xor Asc("abc") = 0
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Ja, das wäre schon ein char-vergleich, müsste natürlich auch mit einer Schleife abgehandelt werden.
    Schlussendlich wäre diese Variante wahrscheinlich schon ein sehr umständlicher Weg. Die oben erwähnten Möglichkeiten erledigt das wahrscheinlich um einiges schneller.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    VaporiZed schrieb:

    Hier erstmal die Doppelschleifenvariante. Muss ehrlich zugeben, dass ich den Sprachumfang von VBS nicht so gut kenne. Das mit dem Dictionary von ~blaze~ ist natürlich viel effizienter.

    Visual Basic-Quellcode

    1. Dim FruitArray
    2. FruitArray = Array("Apple","Orange","Grapes")
    3. Dim BreakfastArray
    4. BreakfastArray = Array("Eggs","Juice","Grapes","Cornflakes")
    5. Dim AlreadyKnown
    6. For Each Fruit In FruitArray
    7. AlreadyKnown = False
    8. For Each Part In BreakfastArray
    9. If Part = Fruit Then
    10. AlreadyKnown = True
    11. Exit For
    12. End If
    13. Next
    14. If Not AlreadyKnown Then
    15. Redim Preserve BreakfastArray(UBound(BreakfastArray) + 1)
    16. BreakfastArray(UBound(BreakfastArray)) = Fruit
    17. End If
    18. Next
    19. For Each Part In BreakfastArray
    20. MsgBox(Part)
    21. Next



    @VaporiZed vielen vielen Dank!! :)
    Nur noch eine Frage.. weißt Du vielleicht, warum ich eine Fehlermeldung bekomme, wenn ich statt MsgBox(Part) in der Zeile 23 folgendes einsetze:

    Output " " & Part.Name, LINE

    ?
    Die Fehlermeldung lautet. Fehler: Objekt erforderlich: 'Eggs'. Code: 800A01A8. Laufzeitfehler in Microsoft VBScript. Zeile 23, Zeichen 1.
    Wie gesagt, meine VBS-Kenntnisse bestehen nur aus der Übertragung meiner VB.Net-Kenntnisse.
    Ich weiß für den Moment nix mit Output anzufangen. Aber Part ist ja aufgrund der For Each-Schleife nur ein Array-Element von BreakfastArray. Und somit ein String. Und ein String hat keine Name-Eigenschaft.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.