Page 1 sur 1
[R] Array dupliquées
Posté : mar. 07 juil. 2009 02:11
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

Re: [..] Array dupliquées
Posté : mar. 07 juil. 2009 02:38
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)","")
Re: [..] Array dupliquées
Posté : mar. 07 juil. 2009 06:26
par SagePourpre
supprdoublons
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
Re: [..] Array dupliquées
Posté : mar. 07 juil. 2009 09:03
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
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
Test de la fonction _ArrayRemoveDuplicates() : Enleve les doublons présent dans un array
#ce ----------------------------------------------------------------------------
#include "UDF_ArrayFunction.au3"
; Example # 1 : using Base 0 array
Dim $avArray[10]
$avArray[0] = "JPM"
$avArray[1] = "STRING1"
$avArray[2] = "Jon"
$avArray[3] = "Larry"
$avArray[4] = "Jeremy"
$avArray[5] = "Valik"
$avArray[6] = "String1" ; this element will be deleted from the updated array
$avArray[7] = "String2"
$avArray[8] = "JdeB"
$avArray[9] = "STRING2" ; this element will be deleted from the updated array
_ArrayDisplay($avArray, "Example # 1 : Before")
_ArrayRemoveDuplicates($avArray)
_ArrayDisplay($avArray, "Example # 1 : After")
; Example # 2 : Base 1 array
Dim $avArray[11]
$avArray[0] = 10
$avArray[1] = "JPM"
$avArray[2] = "String1"
$avArray[3] = "Jon"
$avArray[4] = "Split/Split"
$avArray[5] = "Jeremy"
$avArray[6] = "Valik"
$avArray[7] = "String1" ; this element will be deleted from the updated array
$avArray[8] = "String2"
$avArray[9] = "JdeB"
$avArray[10] = "STRING2" ; this element will be deleted from the updated array
_ArrayDisplay($avArray, "Example # 2 : Before")
_ArrayRemoveDuplicates($avArray, 1)
_ArrayDisplay($avArray, "Example # 2 : After")
; Example # 3 : Base 1 array and Case Sensitive
Dim $avArray[11]
$avArray[0] = 10
$avArray[1] = "JPM"
$avArray[2] = "String1"
$avArray[3] = "Jon"
$avArray[4] = "Split/Split"
$avArray[5] = "Jeremy"
$avArray[6] = "Valik"
$avArray[7] = "String1" ; this element will be deleted from the updated array
$avArray[8] = "String2"
$avArray[9] = "JdeB"
$avArray[10] = "STRING2" ; this element will NOT be deleted from the updated array
_ArrayDisplay($avArray, "Example # 3 : Before")
_ArrayRemoveDuplicates($avArray, 1, 1)
_ArrayDisplay($avArray, "Example # 3 : After")
; Example # 4 : Base 1 array, Case Sensitive and using "/" as Delimiter
Dim $avArray[11]
$avArray[0] = 10
$avArray[1] = "JPM"
$avArray[2] = "String1"
$avArray[3] = "Jon"
$avArray[4] = "Split/Split" ; this element will become 2 elements in the updated array
$avArray[5] = "Jeremy"
$avArray[6] = "Valik"
$avArray[7] = "String1" ; this element will be deleted from the updated array
$avArray[8] = "String2"
$avArray[9] = "JdeB"
$avArray[10] = "STRING2" ; this element will NOT be deleted from the updated array
_ArrayDisplay($avArray, "Example # 4 : Before")
_ArrayRemoveDuplicates($avArray, 1, 1, "/")
_ArrayDisplay($avArray, "Example # 4 : After")
Re: [..] Array dupliquées
Posté : mar. 07 juil. 2009 12:58
par L4crymal
Merci beaucoup à tous vous m'ôtez une grosse épine du pied !!!
GROS GROS MERCI !!!