Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-09-2010, 17:18   #1
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
[c#] eliminazione duplicati

sera a tutti,sono uo studente d'informatica del primo anno,sono alle prese con c# e con l'eliminazione di duplicati da una lista!Praticamente ho 2 liste,una in una classe Sfilata e un'altra in una classe Stilista.Ho la lista di stilisti in sfilata ed in stilista una lista di abito.Devo trovare dei duplicati attraversando entrambe le liste,ma con il mio metodo mi elimina tutti gli elementi della lista degli abiti.devo cercare tutti gli abiti con lostesso codice e rimuoverli! posto ilk codice delle classi.Vi ringrazio anticipatamente per l'aiuto.

Questo nella classe Sfilata

public int RimuoviDoppioni() {
if (listaStilisti.Count == 0) {
throw new System.ApplicationException("lista stilisti vuota");
}
int occorrenze = 0;
foreach(Stilista stilista in listaStilisti) {
for (int j = 0; j < stilista.GetListaAbiti();j++) {
Abito abito = stilista.GetAbito(j);
for(int i = 0; i < stilista.GetListaAbiti(); i++) {
Abito nuovo = stilista.GetAbito(i);
if (abito.Codice == nuovo.Codice) {
stilista.Remove(nuovo);
occorrenze ++;
}
}
}
}
return occorrenze;
}

mentre nella classe Stilista :

using System.Collections;

public class Stilista {

private ArrayList listaAbiti = new ArrayList();
private string nomeECognome;

public Stilista(string nomeECognome) {
this.nomeECognome = nomeECognome;
}

public Abito GetAbito(int i) {
if (i <0 || i > listaAbiti.Count) {
throw new System.ApplicationException("abito inesistente");
}
return (Abito)listaAbiti[i];
}

public override string ToString() {
string risultato = "nome e cognome stilista: "+ "|" + this.nomeECognome + "\n";
foreach (Abito abito in listaAbiti) {
risultato += abito ;
}
return risultato;
}

public int GetListaAbiti() {
return this.listaAbiti.Count;
}

public ArrayList GetLista() {
return this.listaAbiti;
}

public void AddAbito(Abito abito) {
this.listaAbiti.Add(abito);
}



public void Remove(Abito abito) {
this.listaAbiti.Remove(abito);
}


}
}

infine nella classe Abito


public class Abito {

private int codice;
private string descrizione;
private double costo;
private Modella modella;

public Abito() {}


public int Codice {
get { return codice;}
}

public override string ToString() {
return " abito: " + " codice " + " | " + " descrizione " + " | " + " costo " + " | " + " modella "+
"\n" + " " + this.codice + " | " + this.descrizione +" | " + this.costo + " | " + this.modella +"\n";
}

public void SetCodice(int codice) {
this.codice = codice;
}

public int GetCodice() {
return this.codice;
}

public void SetDescrizione(string descrizione) {
this.descrizione = descrizione;
}

public void SetCosto(double costo) {
this.costo = costo;
}

public void SetModella (Modella modella) {
this.modella = modella;
}


}
}
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 19:33   #2
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da giuseppe@85 Guarda i messaggi
sera a tutti,sono uo studente d'informatica del primo anno,sono alle prese con c# e con l'eliminazione di duplicati da una lista!Praticamente ho 2 liste,una in una classe Sfilata e un'altra in una classe Stilista.Ho la lista di stilisti in sfilata ed in stilista una lista di abito.Devo trovare dei duplicati attraversando entrambe le liste,ma con il mio metodo mi elimina tutti gli elementi della lista degli abiti.devo cercare tutti gli abiti con lostesso codice e rimuoverli! posto ilk codice delle classi.Vi ringrazio anticipatamente per l'aiuto.

Questo nella classe Sfilata

public int RimuoviDoppioni() {
if (listaStilisti.Count == 0) {
throw new System.ApplicationException("lista stilisti vuota");
}
int occorrenze = 0;
foreach(Stilista stilista in listaStilisti) {
for (int j = 0; j < stilista.GetListaAbiti();j++) {
Abito abito = stilista.GetAbito(j);
for(int i = 0; i < stilista.GetListaAbiti(); i++) {
Abito nuovo = stilista.GetAbito(i);
if (abito.Codice == nuovo.Codice) {
stilista.Remove(nuovo);
occorrenze ++;
}
}
}
}
return occorrenze;
}

mentre nella classe Stilista :

using System.Collections;

public class Stilista {

private ArrayList listaAbiti = new ArrayList();
private string nomeECognome;

public Stilista(string nomeECognome) {
this.nomeECognome = nomeECognome;
}

public Abito GetAbito(int i) {
if (i <0 || i > listaAbiti.Count) {
throw new System.ApplicationException("abito inesistente");
}
return (Abito)listaAbiti[i];
}

public override string ToString() {
string risultato = "nome e cognome stilista: "+ "|" + this.nomeECognome + "\n";
foreach (Abito abito in listaAbiti) {
risultato += abito ;
}
return risultato;
}

public int GetListaAbiti() {
return this.listaAbiti.Count;
}

public ArrayList GetLista() {
return this.listaAbiti;
}

public void AddAbito(Abito abito) {
this.listaAbiti.Add(abito);
}



public void Remove(Abito abito) {
this.listaAbiti.Remove(abito);
}


}
}

infine nella classe Abito


public class Abito {

private int codice;
private string descrizione;
private double costo;
private Modella modella;

public Abito() {}


public int Codice {
get { return codice;}
}

public override string ToString() {
return " abito: " + " codice " + " | " + " descrizione " + " | " + " costo " + " | " + " modella "+
"\n" + " " + this.codice + " | " + this.descrizione +" | " + this.costo + " | " + this.modella +"\n";
}

public void SetCodice(int codice) {
this.codice = codice;
}

public int GetCodice() {
return this.codice;
}

public void SetDescrizione(string descrizione) {
this.descrizione = descrizione;
}

public void SetCosto(double costo) {
this.costo = costo;
}

public void SetModella (Modella modella) {
this.modella = modella;
}


}
}
Usa il tag CODE altrimenti il tuo codice è illeggibile.

Nel secondo for devi ovviamente saltare l'indice che stai confrontando, altrimenti quello darà sempre esito positivo.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 20:59   #3
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
Quote:
public int RimuoviDoppioni() {
if (listaStilisti.Count == 0) {
throw new System.ApplicationException("lista stilisti vuota");
}
int pos = 0;
int occorrenze = 0;
for (int i = 0 ; i < listaStilisti.Count; i++) {
Stilista stilista = this.GetStilista(i);
for (int j = 0; j < stilista.GetListaAbiti();j++) {
Abito abito = stilista.GetAbito(j);
for(int c = 0; c < stilista.GetListaAbiti(); c++) {
Abito nuovo = stilista.GetAbito(pos);
if (abito.Codice == nuovo.Codice) {
stilista.Remove(nuovo);
occorrenze ++;
}
}
}
}
return occorrenze;
}
ho fatto così,ma mi elimina tutti e 4 gli abiti!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:05   #4
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da giuseppe@85 Guarda i messaggi
ho fatto così,ma mi elimina tutti e 4 gli abiti!
Per "usa il tag CODE" intendo che devi usare il tag CODE con all'interno codice correttamente INDENTATO! Altrimenti è illeggibile.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:09   #5
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Usa il tag CODE altrimenti il tuo codice è illeggibile.

Nel secondo for devi ovviamente saltare l'indice che stai confrontando, altrimenti quello darà sempre esito positivo.
grazie 1000!ma nn va lo stesso!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:11   #6
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Per "usa il tag CODE" intendo che devi usare il tag CODE con all'interno codice correttamente INDENTATO! Altrimenti è illeggibile.
Codice:
       public int RimuoviDoppioni() {
                  if (listaStilisti.Count == 0) {
                        throw new System.ApplicationException("lista stilisti vuota");
                  }
                  int pos = 0;
                  int occorrenze = 0;
                  for (int i = 0 ; i < listaStilisti.Count; i++) {
                          Stilista stilista = this.GetStilista(i);
                          for (int j = 0; j < stilista.GetListaAbiti();j++) {
                                   Abito abito = stilista.GetAbito(j);
                                   for(int c = 0; c < stilista.GetListaAbiti(); c++) {
                                         Abito nuovo = stilista.GetAbito(pos);
                                         if (abito.Codice == nuovo.Codice) {
                                                 stilista.Remove(nuovo);
                                                  occorrenze ++;
                                           }
                                     }
                           }
                  }
                   return occorrenze;
                   }
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22

Ultima modifica di giuseppe@85 : 08-09-2010 alle 21:15.
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:12   #7
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da giuseppe@85 Guarda i messaggi
grazie 1000!ma nn va lo stesso!
Codice PHP:
public int RimuoviDoppioni() {
    if (
listaStilisti.Count == 0) {
        throw new 
System.ApplicationException("lista stilisti vuota");
    }
    
int occorrenze 0;
    foreach(
Stilista stilista in listaStilisti) {
        for (
int j 0stilista.GetListaAbiti();j++) {
            
Abito abito stilista.GetAbito(j);
            for(
int i 0stilista.GetListaAbiti(); i++) {
                if(
i==j) continue; // bastava aggiungere questo
                
Abito nuovo stilista.GetAbito(i);
                if (
abito.Codice == nuovo.Codice) {
                    
stilista.Remove(nuovo);
                    
occorrenze ++;
                }
            }
        }
    }
    return 
occorrenze;

certo che va... è che hai sbagliato a modificarlo, prova così.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:19   #8
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Codice PHP:
public int RimuoviDoppioni() {
    if (
listaStilisti.Count == 0) {
        throw new 
System.ApplicationException("lista stilisti vuota");
    }
    
int occorrenze 0;
    foreach(
Stilista stilista in listaStilisti) {
        for (
int j 0stilista.GetListaAbiti();j++) {
            
Abito abito stilista.GetAbito(j);
            for(
int i 0stilista.GetListaAbiti(); i++) {
                if(
i==j) continue; // bastava aggiungere questo
                
Abito nuovo stilista.GetAbito(i);
                if (
abito.Codice == nuovo.Codice) {
                    
stilista.Remove(nuovo);
                    
occorrenze ++;
                }
            }
        }
    }
    return 
occorrenze;

certo che va... è che hai sbagliato a modificarlo, prova così.
purtroppo non va,ho appena incollato il codice,mi da occorrenze 0 e nn elimina nulla.I codici uguali li ho caricati da file!gli faccio stampare i dati prima e dopo l'eliminazione!grz ancora!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:23   #9
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da giuseppe@85 Guarda i messaggi
purtroppo non va,ho appena incollato il codice,mi da occorrenze 0 e nn elimina nulla.I codici uguali li ho caricati da file!gli faccio stampare i dati prima e dopo l'eliminazione!grz ancora!
Codice PHP:
public int RimuoviDoppioni() {
    if (
listaStilisti.Count == 0) {
        throw new 
System.ApplicationException("lista stilisti vuota");
    }
    
int occorrenze 0;
    foreach(
Stilista stilista in listaStilisti) {
        for (
int j 0stilista.GetListaAbiti();j++) {
            
Abito abito stilista.GetAbito(j);
            for(
int i 0stilista.GetListaAbiti(); i++) {
                
System.out.println(i+" -> "+j+"    ["+abito.Codice+"]["+nuovo.Codice+"]");
        if(
i==j) continue; // bastava aggiungere questo
                
Abito nuovo stilista.GetAbito(i);
                if (
abito.Codice == nuovo.Codice) {
                    
stilista.Remove(nuovo);
                    
occorrenze ++;
                }
            }
        }
    }
    return 
occorrenze;

Prova ad usare questo, poi posta qui cosa ti viene stampato in console.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:40   #10
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Codice PHP:
public int RimuoviDoppioni() {
    if (
listaStilisti.Count == 0) {
        throw new 
System.ApplicationException("lista stilisti vuota");
    }
    
int occorrenze 0;
    foreach(
Stilista stilista in listaStilisti) {
        for (
int j 0stilista.GetListaAbiti();j++) {
            
Abito abito stilista.GetAbito(j);
            for(
int i 0stilista.GetListaAbiti(); i++) {
                
System.out.println(i+" -> "+j+"    ["+abito.Codice+"]["+nuovo.Codice+"]");
        if(
i==j) continue; // bastava aggiungere questo
                
Abito nuovo stilista.GetAbito(i);
                if (
abito.Codice == nuovo.Codice) {
                    
stilista.Remove(nuovo);
                    
occorrenze ++;
                }
            }
        }
    }
    return 
occorrenze;

Prova ad usare questo, poi posta qui cosa ti viene stampato in console.
mi stampa 0---->0 [35877]
0---->0 [75557]
0---->0 [58974]
0---->0 [35877]

nuovo.Codice nn lo stampa;

Codice PHP:
public int RimuoviDoppioni() { 
    if (
listaStilisti.Count == 0) { 
        throw new 
System.ApplicationException("lista stilisti vuota"); 
    } 
    
int occorrenze 0
    foreach(
Stilista stilista in listaStilisti) { 
        for (
int j 0stilista.GetListaAbiti();j++) { 
            
Abito abito stilista.GetAbito(j); 
            for(
int i 0stilista.GetListaAbiti(); i++) { 
                
System.Console.WriteLine(i+" -> "+j+"    ["+abito.Codice+"]["+"]"); 
        if(
i==j) continue; // bastava aggiungere questo 
                
Abito nuovo stilista.GetAbito(i); 
                
System.Console.WriteLine("    Nuovo   "  nuovo.Codice);
                if (
abito.Codice == nuovo.Codice) { 
                    
stilista.Remove(nuovo); 
                    
occorrenze ++; 
                } 
            } 
        } 
    } 
    return 
occorrenze

__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:44   #11
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Si beh ovvio che non lo stampa, lo crea dopo! Correggi.
Però come mai i e j non vengono incrementati?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 21:58   #12
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
[Si beh ovvio che non lo stampa, lo crea dopo! Correggi.
Però come mai i e j non vengono incrementati?[/quote]

Codice PHP:
public int RimuoviDoppioni() { 
    if (
listaStilisti.Count == 0) { 
        throw new 
System.ApplicationException("lista stilisti vuota"); 
    } 
    
int pos 0;
    
int occorrenze 0
    for(
int k 0listaStilisti.Countk++) { 
        
Stilista stilista this.GetStilista(k);
        for (
int j 0stilista.GetListaAbiti();j++) { 
            
Abito abito stilista.GetAbito(j); 
            
System.Console.WriteLine(stilista.GetAbito(j).Codice); 
            
System.Console.WriteLine(stilista.GetAbito(pos).Codice); 
            if (
stilista.GetAbito(j).Codice == stilista.GetAbito(pos).Codice) {
                
System.Console.WriteLine(" " """" "");
                
pos j;
                
occorrenze ++; 
                
stilista.Remove(stilista.GetAbito(pos));
            } 
        }  
    } 
    return 
occorrenze
    } 
ho fatto così e mi stampa gli stessi codici sia per j che per pos;quindi come temevo mi elimina tutti perkè analizza se stesso; strano nemmno così mi incrementa la j,mi stampa zero sempre;avevo corretto e nn lo stampava ugualmente!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 22:08   #13
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
Quote:
Originariamente inviato da giuseppe@85 Guarda i messaggi
[Si beh ovvio che non lo stampa, lo crea dopo! Correggi.
Però come mai i e j non vengono incrementati?
Codice PHP:
public int RimuoviDoppioni() { 
    if (
listaStilisti.Count == 0) { 
        throw new 
System.ApplicationException("lista stilisti vuota"); 
    } 
    
int pos 0;
    
int occorrenze 0
    for(
int k 0listaStilisti.Countk++) { 
        
Stilista stilista this.GetStilista(k);
        for (
int j 0stilista.GetListaAbiti();j++) { 
            
Abito abito stilista.GetAbito(j); 
            
System.Console.WriteLine(stilista.GetAbito(j).Codice); 
            
System.Console.WriteLine(stilista.GetAbito(pos).Codice); 
            if (
stilista.GetAbito(j).Codice == stilista.GetAbito(pos).Codice) {
                
System.Console.WriteLine(" " """" "");
                
pos j;
                
occorrenze ++; 
                
stilista.Remove(stilista.GetAbito(pos));
            } 
        }  
    } 
    return 
occorrenze
    } 
ho fatto così e mi stampa gli stessi codici sia per j che per pos;quindi come temevo mi elimina tutti perkè analizza se stesso; strano nemmno così mi incrementa la j,mi stampa zero sempre;avevo corretto e nn lo stampava ugualmente![/quote]

la variabile k la incrementa j no,strano!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 08-09-2010, 23:23   #14
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
mamma mia che confusione,
rendi pubblica la listaAbiti della classe stilista o costruisci un metodo che te la torni come list<Abito> (meglio ancora) e poi usa un pò di linq.....

Codice:
var abiti = listaStilisti[k].listaAbiti.ToArray().Cast<Abito>();
                var codici = abiti.Select(i => i.Codice).Distinct().ToList();
                var abitiSenzaDoppioni = codici.Select(codice => abiti.First(i => i.Codice == codice)).ToList();
abitiSenzaDoppioni è già formata da gli abiti corretti esclusi i doppioni.

p.s. A fare le cose fatte giuste dovresti implementare l'interfaccia IComparable nella tua classe Abito e overridare il metodo isEquals (mi pare si chiami così non ho tempo di controllare), così facendo potresti chiamare direttamente StilistaPippo.listaAbiti.Distinct().ToList(); e avresti fatto il tutto con una riga di codice.......... non male eh?
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2010, 10:40   #15
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
Quote:
Originariamente inviato da sneeze Guarda i messaggi
mamma mia che confusione,
rendi pubblica la listaAbiti della classe stilista o costruisci un metodo che te la torni come list<Abito> (meglio ancora) e poi usa un pò di linq.....

Codice:
var abiti = listaStilisti[k].listaAbiti.ToArray().Cast<Abito>();
                var codici = abiti.Select(i => i.Codice).Distinct().ToList();
                var abitiSenzaDoppioni = codici.Select(codice => abiti.First(i => i.Codice == codice)).ToList();
abitiSenzaDoppioni è già formata da gli abiti corretti esclusi i doppioni.

p.s. A fare le cose fatte giuste dovresti implementare l'interfaccia IComparable nella tua classe Abito e overridare il metodo isEquals (mi pare si chiami così non ho tempo di controllare), così facendo potresti chiamare direttamente StilistaPippo.listaAbiti.Distinct().ToList(); e avresti fatto il tutto con una riga di codice.......... non male eh?
grazie mille,il tuo metodo è molto valido!Però purtroppo devo farlo diciamo "manualmente",nn posso utilizzare metodi particolari!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2010, 11:06   #16
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
anche senza voler usare Linq perché é un compito scolastico, implementare l'interfaccia IEquatable<T> é perfettamente in linea con l'esercizio semplicemente perché stai spostando gran parte del carico della logica dalla funzione alla definizione dell'oggetto stesso. dopotutto "individuare le responsabilitá delle entitá coinvolte" dovrebbe essere uno degli obiettivi di un corso di programmazione ad oggetti.

una volta implementata questa interfaccia, puoi riscrivere la tua funzione in modo da usare il metodo Equals.

PS: IComparable<T> serve per l'ordinamento, non per la distinzione.
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2010, 17:31   #17
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
grazie a tutti per i suggerimenti!ho risolto!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2010, 19:33   #18
sneeze
Senior Member
 
L'Avatar di sneeze
 
Iscritto dal: Aug 2001
Messaggi: 1049
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
anche senza voler usare Linq perché é un compito scolastico, implementare l'interfaccia IEquatable<T> é perfettamente in linea con l'esercizio semplicemente perché stai spostando gran parte del carico della logica dalla funzione alla definizione dell'oggetto stesso. dopotutto "individuare le responsabilitá delle entitá coinvolte" dovrebbe essere uno degli obiettivi di un corso di programmazione ad oggetti.

una volta implementata questa interfaccia, puoi riscrivere la tua funzione in modo da usare il metodo Equals.

PS: IComparable<T> serve per l'ordinamento, non per la distinzione.
Si come ho scritto non mi ricordavo con esattezza. Il nome corretto dell'interfaccia a cui facevo riferimento è IEqualityComparer<T> che è possibile implementare e passare al metodo distinct, in alternativa è possibile overridare Equals appunto e GetHashCode.

Ad ogni modo non vedo perchè non usare Linq in un compito scolastico... quand'è che cominceranno insegnanti ed affini a mettere da parte la non-voglia di aggiornarsi e a favorire linguaggi e modi di programmare nuovi ed efficenti?
Linq è una vera rivoluzione in ambito c# e net in generale (e non solo). Un vero gioiellino di questo linguaggio. Si sta radicando in ogni ambito del .net: dall'accesso al dato, all'interrogazione di dati in memoria, all'interrogazione di file gerarchici (xml in primis) ecc ecc...
Inoltre si porta dietro automaticamente lambda expression, extension method, anonymoustype, collection initializer, array initializer tutte cose che non fa per niente male imparare. Per non parlare del fatto che forma il programmatore a scrivere necessariamente codice "fluent" e a COMPILARE le query che poi lancerà.
Non capisco davvero questo odio verso quello che c'è di nuovo e di valido. Ce ne fossero tutti i giorni di implementazioni come LinQ.
sneeze è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2010, 20:55   #19
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
tranquillo non me lo devi vendere... ci ho scritto un motore di ricerca basato su linq to objects e programmazione funzionale
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 10-09-2010, 12:44   #20
giuseppe@85
Senior Member
 
Iscritto dal: Jan 2009
Messaggi: 426
Quote:
Originariamente inviato da sneeze Guarda i messaggi
Si come ho scritto non mi ricordavo con esattezza. Il nome corretto dell'interfaccia a cui facevo riferimento è IEqualityComparer<T> che è possibile implementare e passare al metodo distinct, in alternativa è possibile overridare Equals appunto e GetHashCode.

Ad ogni modo non vedo perchè non usare Linq in un compito scolastico... quand'è che cominceranno insegnanti ed affini a mettere da parte la non-voglia di aggiornarsi e a favorire linguaggi e modi di programmare nuovi ed efficenti?
Linq è una vera rivoluzione in ambito c# e net in generale (e non solo). Un vero gioiellino di questo linguaggio. Si sta radicando in ogni ambito del .net: dall'accesso al dato, all'interrogazione di dati in memoria, all'interrogazione di file gerarchici (xml in primis) ecc ecc...
Inoltre si porta dietro automaticamente lambda expression, extension method, anonymoustype, collection initializer, array initializer tutte cose che non fa per niente male imparare. Per non parlare del fatto che forma il programmatore a scrivere necessariamente codice "fluent" e a COMPILARE le query che poi lancerà.
Non capisco davvero questo odio verso quello che c'è di nuovo e di valido. Ce ne fossero tutti i giorni di implementazioni come LinQ.
Codice PHP:
public int RimuoviDoppioni() { 
        if (
listaStilisti.Count == 0) { 
            throw new 
System.ApplicationException("lista stilisti vuota"); 
        } 
        
int pos 0;
        
int occorrenze 0
        for (
int z 0z<listaStilisti.Countz++) {
            
Stilista stilista this.GetStilista(z);
            for (
int j 0stilista.GetListaAbiti();j++) {
                
Abito abito stilista.GetAbito(j);
                
bool trovato false;
            for (
int m 0<listaStilisti.Count++) {
                
Stilista stilista2 this.GetStilista(m);
                for(
int c 0stilista2.GetListaAbiti(); c++) {
                    
Abito nuovo stilista2.GetAbito(pos);
                    if (
abito.Codice == nuovo.Codice) {
                        if (
trovato) {
                            
stilista2.Remove(nuovo);
                            
occorrenze ++;
                            } else {
                                
trovato true;
                            }
                        }
                    }
                }
            }
        }
        return 
occorrenze;
    } 
Alla fine ho risolto così grazie anke all'aiuto di un utente su un altro forum!
Tu hai fortemente ragione,ma io ho seguito un corso che si chiama oggetti 1 che ti da le basi e ti fa capire il funzionamentodella programmazione ad ogetti!Da ottobre seguirò oggetti 2 con il quale,almeno credo,inizierò ad imparare meglio i trucchetti della programmazione,e spero anke quello che hai menzionato!cmq ci tenevo a dirvi che siete davvero molto bravi,i miei complimenti!grazie ancora x i vostri suggerimenti!!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22

Ultima modifica di giuseppe@85 : 10-09-2010 alle 12:47.
giuseppe@85 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Zscaler Threat Report 2026: l'adozione d...
Claude AI minaccia omicidi e ricatti qua...
Dentro la gara: a Milano Cortina 2026 i ...
Samsung Display presenta QD-OLED Penta T...
KONAMI torna con "Silent Hill: Town...
Rende il citofono smart a 44,99€: Ring I...
ThunderX3 XTC, la sedia da ufficio che s...
Mercy, Mission Impossible, Aronofsky: il...
Project Windless: il nuovo action in esc...
Saros: mostrato il gameplay del gioco de...
God of War: Sons of Sparta annunciato e ...
John Wick torna in un nuovo videogioco a...
MADE chiude il 2025 con 59 partner e 250...
007 First Light: allo State of Play un n...
Gli iPhone su Amazon costano meno che su...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v