Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gianluigi - 25 Agosto 2017, 00:38:37

Titolo: Fondere due vettori in uno eliminando i duplicati
Inserito da: Gianluigi - 25 Agosto 2017, 00:38:37
Sulla ML c'è una richiesta su come eliminare gli elementi duplicati in un array.
Però poi spiega che ha due Ambiance ma ne vuole solo una.
/usr/share/themes/Ambiance
/home/herberth.local/share/themes/Ambiance
Pertanto deduco che possa avere due vettori Ambiance da fondere in uno senza duplicati.
Io ho suggerito questo postandolo su Playground (http://gambaswiki.org/wiki/playground?nh): https://gambas-playground.proko.eu/?gist=c6e63a84d209911a2b3ff50d2b46a368

Voi che codice avreste suggerito?

 :ciao:
Titolo: Re:Fondere due vettori in uno eliminando i duplicati
Inserito da: vuott - 25 Agosto 2017, 02:54:51
Si potrebbe fare una cosa del genere:

Codice: [Seleziona]
Public Sub Main()

  Dim s As String
  Dim i As Integer
  Dim ssA As String[] = ["Smith", "Anderson", "Clark", "Wright", "Mitchell", "Johnson", "Thomas", "Rodriguez"]
  Dim ssB As String[] = ["Johnson", "Lopez", "Perez", "Wright", "Williams", "Smith", "Thomas", "Jones", "Anderson"]
 
   For Each s In ssB
     i = ssA.Find(s)
     If i > -1 Then
       ssA.Remove(i)
     Endif
   Next
   
   ssB.Insert(ssA)
   ssB.Sort()
 
   For Each s In ssB
     Print s
   Next
   
End
Titolo: Re:Fondere due vettori in uno eliminando i duplicati
Inserito da: Gianluigi - 28 Agosto 2017, 23:19:35
Forte il metodo proposto da Minisini per eliminare i doppioni.
Per rimanere nella nostra semplificazione (anche se un po arzigogolato) lo si potrebbe scrivere così:
Codice: [Seleziona]
  Dim cThemes As New Collection
  Dim ssA As String[] = ["Johnson", "Lopez", "Perez", "Wright", "Williams", "Smith", "Thomas", "Jones", "Anderson"]
  Dim ssB As String[] = ["Smith", "Anderson", "Clark", "Wright", "Mitchell", "Johnson", "Thomas", "Rodriguez"]
  Dim aThemes As New String[]
  Dim sTheme As String
  Dim sDir As String

  For Each sDir In ssA
    cThemes[sDir] = True
  Next

  For Each sDir In ssB
    cThemes[sDir] = True
  Next

  For Each cThemes
    aThemes.Add(cThemes.Key)
  Next

  aThemes.Sort(gb.Ascent)

  For Each sTheme In aThemes
    Print sTheme
  Next

Bel trucchetto (a me sconosciuto)  :ok:

P.S. La discussione originale è qui (http://www.gambas-it.org/smf/index.php?topic=5881.msg42116#msg42116)
Titolo: Re:Fondere due vettori in uno eliminando i duplicati
Inserito da: vuott - 29 Agosto 2017, 02:08:42
...molte strade portano a Roma.   (https://izgr.ru/files/smile/emotions_50.gif)
Titolo: Re:Fondere due vettori in uno eliminando i duplicati
Inserito da: allegfede - 06 Settembre 2017, 16:42:19
in pratica ha sfruttato il meccanismo intrinseco nelle collection che aggiungono un elemento solo se non e' duplicato?
Titolo: Re:Fondere due vettori in uno eliminando i duplicati
Inserito da: Gianluigi - 06 Settembre 2017, 16:56:46
in pratica ha sfruttato il meccanismo intrinseco nelle collection che aggiungono un elemento solo se non e' duplicato?

Si esattamente quello che io, non usando mai le collezioni, non conoscevo.
Titolo: Re:Fondere due vettori in uno eliminando i duplicati
Inserito da: allegfede - 07 Settembre 2017, 12:42:56
me possino, le ho scoperte anche io ora, in questo post :D