Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Combinazioni di ArrayList

    Ciao ragazzi,
    sto sbattendo da ieri alla ricerca di una soluzione ma non ci sono riuscito.

    Vi faccio il caso banale perchè poi lo devo riportare su n arraylist.

    Ho in pratica due arraylist di questo tipo
    Specifiche(1)
    10
    12

    Specifiche(2)
    13
    14

    Ho la necessità di ottenere tutte le coppie possibili tra gli elementi dei due (poi potranno essere n) arraylist.
    Ogni arraylist può avere al tempo stesso n elementi al suo interno che devono essere combinati, in questo caso dovrò ritrovarmi queste coppie:
    10-13
    10-14
    12-13
    12-14

    Vi prego riuscite ad aiutarmi?
    Grazie mille

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887


    ma non basta ciclare nel primo ed aggiungere ad ogni elemento il corrente del secondo (in un altro ciclo ?)

  3. #3
    Ciao grazie per la risposta.
    Guarda stavo provando il caso banale su di un file di prova, ti scrivo di seguito il codice, ma non ottengo il risultato sperato:

    codice:
            Dim Primo = New ArrayList
            Dim Secondo = New ArrayList
    
            Primo.Add("A")
            Primo.Add("B")
    
            Secondo.Add("C")
            Secondo.Add("D")
    
            Dim Combinazioni() As ArrayList = New ArrayList(4) {}
    
            Dim Conta As Integer = 0
    
            For Each element In Primo
                Conta = Conta + 1
                Combinazioni(Conta) = New ArrayList
                Combinazioni(Conta).Add(element.ToString)
                For Each element2 In Secondo
                    Combinazioni(Conta).Add(element2.ToString)
                Next
    
                For Each element3 In Combinazioni(Conta)
                    Response.Write(element3.ToString & "
    ")
                Next
                Response.Write("
    ")
            Next
    Se lo provi infatti vedi che il risultato è:
    ACD
    BCD

    ho provato anche a mettere un exit for nel secondo ciclo, ma ottengo invece
    AC
    BC

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,288
    banalmente farei così

    codice:
     Dim Primo = New ArrayList
     Dim Secondo = New ArrayList
    
     Primo.Add("A")
     Primo.Add("B")
    
     Secondo.Add("C")
     Secondo.Add("D")
    
    Dim wList = new list(of string)
    
    for each ItemUno in Primo
       for each Itemdue in Secondo
              wlist.Add(ItemUno & "-" & ItemDue)
       next
    next
    
    return wList.ToarrayList

  5. #5
    ok con la lista funziona perfettamente.

    Adesso una volta risolto il caso banale sto cercando di applicarlo al mio caso specifico che è particolarmente complesso, vale a dire
    n array di n elementi.

    Al momento nel mio codice riesco ad ottenere
    n arraylist
    Specifiche(1)
    Specifiche(2)
    Specifiche(3) e così via

    In ognuno di questi array sono presenti i valori che dovranno accoppiarsi con gli altri array, vale a dire:
    Specifiche(1) = {A, B, C}
    Specifiche(2) = {D, E}
    Specifiche(3) = {F, G, H}

    Il risultato che dovrò ottenere sarà quindi:
    A-D-F
    A-D-G
    A-D-H
    A-E-F
    A-E-G
    A-E-H
    B-D-F e così via

    Hai qualche consiglio e/o indicazione anche per il caso specifico?

    Grazie mille

  6. #6
    Sto provando così, però mi restituisce errore Index non compreso nell'intervallo.

    Ti scrivo il codice credo che il problema sia legato alla dichiarazione dell'array che conterrà gli elementi:

    codice:
          
     Dim wList As ArrayList = New ArrayList()
            Dim Conta As Integer = 0
    
            Do While Conta <= (LstSpecifiche_0.Items.Count - 1)
                For Each elemento In Specifiche(Conta)
                    wList(Conta).Add(elemento)
                Next
                Conta = Conta + 1
            Loop
    
            For Each element2 In wList
                Response.Write(element2.ToString & "
    ")
            Next
    Riesci ad aiutarmi?
    Grazie!

  7. #7
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,288
    Velocemente farei una cosa del genere

    codice:
       Public Class GruppoArray
            Private _maxitem As Integer
            Private _GruppoArray As New List(Of ArrayList)
    
            Public ReadOnly Property MaxItemPerArray As Integer
                Return _maxitem
            End Property
    
            Public ReadOnly Property ListaArray As ArrayList()
                    Return _GruppoArray.ToArray()
            End Property
    
            Public Sub Add(ByVal wArray As ArrayList)
                _GruppoArray.add(wArray)
            End Sub
        End Class
    
    
        Private function pippo()
            Dim wReturnList As New List(Of String)
            Dim wContatore As Integer = 0
            Dim wStringa As String
            Dim wGruppo As GruppoArray = New GruppoArray()
    
            ''aggiungi array alla classe wGruppo 
    
            For wContatore to  wGruppo.MaxItemPerArray
                wStringa = ""
                For Each ItemArr In wGruppo.ListaArray
                    If ItemArr.Count > wContatore + 1 Then
                        ''''Usa uno string builder
                        wStringa &= ItemArr(wContatore).ToString
                    End If
                Next
                wReturnList.Add(wStringa)
                wContatore += 1
            Next
            Return wReturnList.ToArray()
        End function

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    zeta, tanto per la cronaca, quello che volevi fare all'inizio era questo:

    codice:
            Dim Primo As New ArrayList
            Dim Secondo As New ArrayList
    
            Primo.Add("A")
            Primo.Add("B")
            Primo.Add("C")
    
            Secondo.Add("D")
            Secondo.Add("E")
            Secondo.Add("F")
    
            Dim Combinazioni As New ArrayList
    
            For i As Integer = 0 To Primo.Count - 1
                For j As Integer = 0 To Secondo.Count - 1
                    Combinazioni.Add(Primo(i) + Secondo(j))
                Next
            Next

  9. #9
    Ciao djciko,
    sì infatti avevo indicato che partendo dal caso banale forse mi sarebbe stato più semplice arrivare ad una soluzione per n arraylist.

    Purtroppo però, nonostante il tuo aiuto sia stato utilissimo per il caso banale, non mi è stato di aiuto per capire come implementarlo per n arraylist.
    Cercavo semplicemente di arrivare ad una soluzione in maniera autonoma.

    Appena posso proverò l'ultimo codice di URANIO.

    Grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.