2017-06-05 1 views
0

Ich versuche, Duplikate aus einem Array zu entfernen und ein reduziertes Array zu erstellen. Ich erhalte einen Objektfehler. Hier ist, was ich tue -Prüfen, ob ein String im Array vorhanden ist - was ist der Fehler hier?

Dim LUT as object, baseArray() as string, sval as variant 
'Dim sval as string ... ignore this 
For I = 1 to n 
    Set LUT = CreateObject("Scripting.Dictionary") 
    ... other stuff 
    u = 1 
    for each sval in baseArray 
     if not LUT.exists(sval) then 
      do something... 
      LUT.Add u, sval 
     end if 
    u = u + 1 
    next sval 
    Set LUT = nothing 
Next I 

Bitte vergeben, wenn der Code nicht raffiniert ist. Ich brauche es, um mehr zu arbeiten, als die meisten Speicher effizient, obwohl unnötige Unordnung immer vermieden werden muss. Danke für Ihre Hilfe.

+0

Bitte ignorieren Sie die Zeile "dim sval as string". – Jabberwocky

+0

In welcher Zeile wird der Fehler tatsächlich angezeigt? –

+1

OK - nächster wahrscheinlicher Fehler 'Nächstes Vorkommen' sollte entweder' Weiter' oder 'NächstesSval' sein (aber immer noch keinen Objektfehler verursachen - stoppt den Code einfach) – YowE3K

Antwort

0

Diese Methode existiert als Argument eines Wörterbuchschlüssels und nicht als Wörterbuchwert.

LUT.exists(sval) 

Sie wahrscheinlich eine andere Datenstruktur zu überprüfen, wie Sammlungen und diese Methode Collection.contains

https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.collection.contains(v=vs.110).aspx

+0

Das OP verwendet 'sval' als Schlüssel, wenn das Wörterbuch aktualisiert wird (und einen Wert von '0' verwendet), daher ist es wahrscheinlich, dass' sval' ein Schlüssel ist. – YowE3K

+0

Ich denke, mein Verständnis des Objekts war sehr schlecht. Es ist immer noch schlecht, aber ich habe eine Bearbeitung vorgenommen, um das Objekt mit dem Wert zu referenzieren und den Schlüssel auf einen Zähler zu setzen, den ich innerhalb der "für jede" -Schleife habe, wie Sie oben im bearbeiteten Code sehen können. Ich bekomme immer noch den gleichen Fehler am selben Ort - damit sollte es nichts zu tun haben. – Jabberwocky

+0

Sie verwenden wahrscheinlich Microsoft Scripting Runtime. In diesem Fall überprüfen Sie diese https://msdn.microsoft.com/en-us/library/5h92h863(v=vs.84).aspx Die ** ADD-Methode ** nimmt als Argument ** Schlüssel und dann Element ** . Ich glaube, du hast sie rückwärts genannt –

0

Wenn Sie das Wörterbuch ohne Scripting tun möchte, kann wollen, können Sie es tun mit Zeichenfolgenvergleichen:

Sub DeDupeArray() 
Dim MyArr As Variant, NewArr() As String, X As Long 
MyArr = Array("Hello", "World", "This", "World", "Is Some", "World", "Data") 
ReDim Preserve NewArr(0) 
For X = LBound(MyArr) To UBound(MyArr) 
    If InStr(1, "|" & Join(NewArr, "|") & "|", "|" & MyArr(X) & "|") = 0 Then 'Test if the element in MyArr exists in NewArr 
     If NewArr(0) <> "" Then ReDim Preserve NewArr(UBound(NewArr) + 1) 'Add another element to the array only if it's not the first element to be entered (otherwise will be blank in address 0) 
     NewArr(UBound(NewArr)) = MyArr(X) 'Add Element X from MyArr into the last address of NewArr 
    End If 
Next 
MsgBox "Old Array: " & Join(MyArr, "|") & vbLf & vbLf & "New Array: " & Join(NewArr, "|") 
End Sub 
Verwandte Themen