[R] Array dupliquées

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
L4crymal
Niveau 8
Niveau 8
Messages : 513
Enregistré le : mer. 24 sept. 2008 14:53
Status : Hors ligne

[R] Array dupliquées

#1

Message par L4crymal »

Bonjours, j'aimerais avoir de l'aide car je souhaite pouvoir supprimer le contenu d'une Array lorsque celui-ci est dupliqué, exemple:


J'ai une Array qui contient ceci ( les différent partie de l'array sont délimitées par un "/":

12/55/44/55/45/12/45/55

et j'aimerais que après le passage dans fonction, que l'array soit comme ceci :

12/55/44/45

Merco d'avance :D
Modifié en dernier par L4crymal le mar. 07 juil. 2009 12:59, modifié 1 fois.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Array dupliquées

#2

Message par orax »

Si la vitesse n'a pas d'importance (j'ai essayé avec StringRegExpReplace mais je n'ai pas réussi), vous pouvez faire comme ça (à tester ! mais ça devrait marcher) :

Code : Tout sélectionner

#include <array.au3>
$a = StringRegExp("12/55/44/55/45/12/45/55/12/55/44/55/45/12/45/55/12/55/44/55/45/12/45/55", "(?>(\d+)/?)(?!.*?\1)", 3)
MsgBox(0,"",_ArrayToString($a,"/"))
Eh, sinon pour les "vrai array" il y a _ArrayUnique.

Edité (c'est bof bof mais ça pourrait marcher) :

Code : Tout sélectionner

StringRegExpReplace("12/55/44/55/45/12/55/44/55/45","(\d\d)/?(?=.*?\1)","")
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Array dupliquées

#3

Message par SagePourpre »

supprdoublons :mrgreen:

Code : Tout sélectionner

#include<array.au3>

$arr = StringSplit("12/55/44/55/45/12/45/55", "/", 1) ; utilisé ici seulement pour reconstituer le tableau fourni dans le sujet



_ArrayDisplay($arr,"Tableau avant")
supprdoublons($arr,1)
_ArrayDisplay($arr,"Tableau après")



; Infos
;Supprimes tous les doublons d'un tableau 
;
; $arr = Tableau qui doit être examiné
; $min = (0,1) ... $arr[0] est-il l'index du tableau ou un élément à être traité ?
; $token = N'importe quoi qui ne sera pas dans le tableau (par défaut  :  /-_-\ )   * Dans 99.999999% des cas, ceci n'a pas à être changé



Func supprdoublons(ByRef $arr,$min = 1,$token = "/-_-\")


Switch $min
    Case 0
    $arr = StringSplit(_ArrayToString($arr, $token), $token,1)
Case 1
    
Case Else
    MsgBox(0,"Erreur","Cette valeur est Booléenne (0,1)")
EndSwitch





$max = $arr[0]

For $i = $min To $arr[0]
    
    If $arr[$i] = $token Then
        ExitLoop
    EndIf
    
    $search = _ArrayFindAll($arr, $arr[$i])
    $search = StringSplit(_ArrayToString($search, $token), $token,1)
    If $search[0] > 1 Then
        For $j = 2 To $search[0]
            _ArrayDelete($arr, $search[$j])
            _ArrayAdd($arr, $token)
            
        Next
    EndIf


    
    

    

    
Next

$search = _ArrayFindAll($arr,$token)
ReDim $arr[$search[0]]
Switch $min
    Case 0 
    _ArrayPush($arr,$token)
    ReDim $arr[$search[0]-1]
    
    Case 1
    $arr[0] = $search[0] -1
EndSwitch



Return $arr



EndFunc
 
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
20100
Niveau 3
Niveau 3
Messages : 43
Enregistré le : ven. 03 juil. 2009 11:39
Status : Hors ligne

Re: [..] Array dupliquées

#4

Message par 20100 »

J'utilise cette fonction pour supprimer les doublons présent dans un array.

Code : Tout sélectionner

;===========================================================================================
; Description    :  Enleve les doublons présent dans un array
; Function Name  :  _ArrayRemoveDuplicates()
; Parameter(s)   :  $avArray
;                   $iBase
;                   $iCaseSense
;                   $sDelimter
; Return Value(s):  On Success - Returns 1 and the cleaned up Array is set
;                   On Failure - Returns an -1 and sets @Error
;                        @Error=1 $avArray is not an array
;                        @Error=2 $iBase is different from 1 or 2
;                        @Error=3 $iCaseSense is different from 0 or 1
; Author         :  uteotw, but ALL the credits go to nitro322 and SmOke_N, see link below
; Note(s)        :  None
; Link           ;  http://www.autoitscript.com/forum/index.php?showtopic=7821
; Example        ;  Yes
;===========================================================================================
Func _ArrayRemoveDuplicates(ByRef $avArray, $iBase = 0, $iCaseSense = 0, $sDelimter = "")
    Local $sHold
   
    If Not IsArray($avArray) Then
        SetError(1)
        Return -1
    EndIf
    If Not ($iBase = 0 Or $iBase = 1) Then
        SetError(2)
        Return -1
    EndIf
    If $iBase = 1 AND $avArray[0] = 0 Then
        SetError(0)
        Return 0
    EndIf
    If Not ($iCaseSense = 0 Or $iCaseSense = 1) Then
        SetError(3)
        Return -1
    EndIf
    If $sDelimter = "" Then
        $sDelimter = Chr(01) & Chr(01)
    EndIf
 
    If $iBase = 0 Then
        For $i = $iBase To UBound($avArray) - 1
            If Not StringInStr($sDelimter & $sHold, $sDelimter & $avArray[$i] & $sDelimter, $iCaseSense) Then
                $sHold &= $avArray[$i] & $sDelimter
            EndIf
        Next
        Local $avNewArray = StringSplit(StringTrimRight($sHold, StringLen($sDelimter)), $sDelimter, 1)
        ReDim $avArray[$avNewArray[0]]
        For $i = 1 to $avNewArray[0]
            $avArray[$i-1] = $avNewArray[$i]
        Next
    ElseIf $iBase = 1 Then
        For $i= $iBase To UBound($avArray) - 1
            If Not StringInStr($sDelimter & $sHold, $sDelimter & $avArray[$i] & $sDelimter, $iCaseSense) Then
                $sHold &= $avArray[$i] & $sDelimter
            EndIf
        Next
        $avArray = StringSplit(StringTrimRight($sHold, StringLen($sDelimter)), $sDelimter, 1)
    EndIf

    Return 1
EndFunc
Exemple d'utilisation :
► Afficher le texte
Avatar du membre
L4crymal
Niveau 8
Niveau 8
Messages : 513
Enregistré le : mer. 24 sept. 2008 14:53
Status : Hors ligne

Re: [..] Array dupliquées

#5

Message par L4crymal »

Merci beaucoup à tous vous m'ôtez une grosse épine du pied !!!


GROS GROS MERCI !!!
Répondre