[Gambas-user] To the wish list...

Doriano Blengino doriano.blengino at ...1909...
Sat Aug 22 07:53:30 CEST 2009


Jussi Lahtinen ha scritto:
> Meaning like this? Should be faster!
>
> Dim col As New Collection
>
> For ii = 0 To iMyArray.Max
> col.Add(iMyArray[ii],  iMyArray[ii])
> Next
>
> iMyArray.Clear()
>
> For Each ii In col
> iMyArray.Add(ii)
> Next
>
>
> Jussi
>
>
> 2009/8/21 Benoît Minisini <gambas at ...1...>:
>   
>>> Now I use algorithm like this (maybe not optimal);
>>>
>>> Dim ii As Integer
>>> Dim jj As Integer
>>> Dim bRemove As Boolean
>>>
>>> While ii < iMyArray.Count
>>>
>>>  jj = 0
>>>  bRemove = False
>>>  While jj < iMyArray.Count
>>>   If ii <> jj And iMyArray[ii] = iMyArray[jj] Then
>>>   iMyArray.Remove(ii)
>>>   bRemove = True
>>>   Else
>>>   Inc jj
>>>   Endif
>>>  Wend
>>>
>>> If bRemove = False Then
>>> Inc ii
>>> Endif
>>> Wend
>>>
>>>
>>> Good point Benôit. Array is populated from file, but maybe I should use
>>> .Find() before .Add().
>>>
>>>
>>> Jussi
>>>
>>>       
>> You should use a collection to detect duplicates, otherwise your algorithm is
>> O(n^2)
>>     
Another technique could be to keep the array (or collection, don't know) 
sorted while constructing it. If sorted, a single run can detect all the 
duplicates, giving O(n). If the logic behind requires the values in the 
original order, then this information should be kept in a parallel array.

Just for fun...

Regards,
Doriano






More information about the User mailing list