aus array bestimmte werte löschen

  • hallo leute,

    gibt es eine 'einfache' möglichkeit, aus einem array bestimmte werte zu löschen, ohne deren index zu kennen?

    mit 'einfach' meine ich, einfacher als das array per schleife nach den werten zu durchsuchen, dabei deren index
    zu ermitteln und diesen dann zu löschen.

    weiss jemand rat?

    danke


    gruss

    sam

    Einmal editiert, zuletzt von sam ghost (6. September 2012 um 13:28)

  • Den Index kannst du auch mit

    [autoit]

    _ArraySearch

    [/autoit]

    ermitteln.
    Dann mit

    [autoit]

    _ArrayDelete

    [/autoit]

    löschen.

    "Mit ohne Schleife"


    Bsp.

    [autoit]

    #include <Array.au3>
    Dim $aNewArray[10] = ["aa","gg","tt","ll","oo","ff"]

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

    $iIndex = _ArraySearch($aNewArray, "tt", 0, 0, 0, 1)
    _ArrayDisplay($aNewArray)

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

    _ArrayDelete($aNewArray,$iIndex)
    _ArrayDisplay($aNewArray)

    [/autoit]

    Einmal editiert, zuletzt von Kizum (6. September 2012 um 12:32)

  • hallo kizum,

    danke für die hilfe ... hätte vielleicht erwähnen sollen, dass der wert mehfach vorkommt ... vielleicht schilder ich mal genauer, was ich machen will ...

    array sieht so aus:

    [0]|9
    [1]|CN=E33494C
    [2]|OU=6_x_180
    [3]|OU=6_28_x
    [4]|OU=Computers-64
    [5]|OU=HAM
    [6]|OU=W120
    [7]|DC=W120
    [8]|DC=home
    [9]|DC=net

    es sollen fliegen die werte, die mit CN= und DC= beginnen oder anders herum übrig bleiben sollen die werte, die mit OU= beginnen ohne deren reihenfolge
    zu ändern ...

    eine zwischenlösung, die ich gefunden habe, mit _ArrayFindAll alle indexe für die OU= zu ermitteln ... aber wie krieg ich die werte dieser indexe jetzt in ein
    neues array ... ich suche noch ...

    so long

    sam

  • Du könntest das ganze auch mit Hilfe eines Strings machen. Ich weiß jetzt nicht wie viel wert du auf Geschwindigkeit setzt, aber bei _ArrayDelete wird halt jedes mal das Array neu dimensioniert. Hier auf jeden Fall mal eine Version mit nem String:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Dim $aArray[10] = [9, "CN=E33494C", "OU=6_x_180", "OU=6_28_x", "OU=Computers-64", "OU=HAM", "OU=W120", "DC=W120", "DC=home", "DC=net"]

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

    $sResult = ""
    For $iI = 1 To $aArray[0]
    If StringLeft($aArray[$iI], 2) = "OU" Then $sResult &= $aArray[$iI]&","
    Next
    $aResult = StringSplit(StringTrimRight($sResult, 1), ",")
    _ArrayDisplay($aResult)

    [/autoit]