none
Confronto fra due array RRS feed

  • Domanda

  • Salve, sto cercando di confrontare due array di stringhe ciclando entrambi con un ciclo foreach, se le due stringhe sono uguali la stringa del secondo array viene scritta in un richtextbox, se sono diverse viene scritta nello stesso richtextbox (Append) ma colorata di rosso. Purtroppo non va, ho provato in tutte le salse, anche abbandonando l'idea degli array e confrontando due file leggendo riga per riga ma niente, le stringhe vengono scritte sempre in rosso e triplicate.Dove sbaglio? di seguito il codice:

    private void CompareButton_Click(object sender, EventArgs e)
                {
                //cancello il contenuto
              
                var lineB = new System.Collections.ArrayList();
                var lineT = new System.Collections.ArrayList();
                var lineDiff = new System.Collections.ArrayList();
              
                //System.IO.StreamReader fileB = new System.IO.StreamReader(outputB);
                //System.IO.StreamReader fileT = new System.IO.StreamReader(outputT);
                   
                    lineB.AddRange(richTextBoxBordo.Lines);
                    lineT.AddRange(richTextBoxTerra.Lines);

                    richTextBoxTerra.Clear();

                string sDif = String.Empty;
                          foreach(object sT in lineB)
                    {
                    foreach (object sB in lineT)
                    {
                        if(sT != sB)
                        {
                           richTextBoxTerra.AppendText((string)sB + System.Environment.NewLine, System.Drawing.Color.Red);
                        }
                    else
                    {
                           richTextBoxTerra.AppendText((string)sB + System.Environment.NewLine);
                        }
                }

            }
            }
    Grazie per l'aiuto


    • Modificato marins87 mercoledì 6 novembre 2019 15:50
    mercoledì 6 novembre 2019 15:44

Tutte le risposte

  • Ciao,

    a quanto pare hai due foreach innestati e quindi per ogni elemento del primo fai un ciclo intero anche sul secondo array, e logicamente così moltiplichi gli elementi differenti.

    Se il numero di elementi nei due array è lo stesso, puoi usare un ciclo for, qualcosa del genere per esempio:

    int max=Math.Max(lineB.Count, lineT.Count);
    	
    for(int i=0;i<max;i++)
    {
    	if (i < lineB.Count && i < lineT.Count)
    	{
    		if (lineB[i] == lineT[i])
    			lineUguali.Add(lineB[i]);
    		else lineDiff.Add(lineB[i]);
    	}
    }



    giovedì 7 novembre 2019 08:13
    Moderatore
  • Se i due array contengono lo stesso numero di elementi e se il confronto deve essere eseguito solo fra elementi con lo stesso indice (la stessa posizione nell'array), allora puoi farlo con il ciclo for.

    Se i due array contengono lo stesso numero di elementi ed il confronto riguarda elementi anche in posizione diversa, allora puoi farlo con un for con qualche accorgimento.

    Se i due array possono avere dimensioni differenti e quindi il confronto riguarda elementi anche in posizione diversa, allora è meglio seguire un'altra via.

    In generale, dovresti fare una cosa del genere che copre le varie ipotesi:

    per ogni elemento del secondo array, se è contenuto nel primo allora scrivilo in nero altrimenti scrivilo in rosso.

    che è quello che hai fatto ma con un paio di imprecisioni:

    - se vuoi che a "comandare" siano le linee del secondo array, il foreach principale (quello esterno) deve agire sul secondo array

    - il confronto con ogni stringa del primo array ti deve servire per capire se hai trovato o meno una stringa uguale, solo DOPO il confronto con ogni riga, quando sai SE ne hai trovata una uguale, a quel punto vai a scrivere la stringa in nero o in rosso.

    Probabilmente esisteranno cose già fatte che ti fanno questo confronto… ma così impari meglio.


    domenica 10 novembre 2019 08:06