Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
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 = 0; j < stilista.GetListaAbiti();j++) {
            
Abito abito = stilista.GetAbito(j);
            for(
int i = 0; i < stilista.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 = 0; j < stilista.GetListaAbiti();j++) {
            
Abito abito = stilista.GetAbito(j);
            for(
int i = 0; i < stilista.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 = 0; j < stilista.GetListaAbiti();j++) {
            
Abito abito = stilista.GetAbito(j);
            for(
int i = 0; i < stilista.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 = 0; j < stilista.GetListaAbiti();j++) {
            
Abito abito = stilista.GetAbito(j);
            for(
int i = 0; i < stilista.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 = 0; j < stilista.GetListaAbiti();j++) { 
            
Abito abito = stilista.GetAbito(j); 
            for(
int i = 0; i < stilista.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 = 0; k < listaStilisti.Count; k++) { 
        
Stilista stilista = this.GetStilista(k);
        for (
int j = 0; j < stilista.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(" " + ""+ j + "" + "");
                
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 = 0; k < listaStilisti.Count; k++) { 
        
Stilista stilista = this.GetStilista(k);
        for (
int j = 0; j < stilista.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(" " + ""+ j + "" + "");
                
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 = 0; z<listaStilisti.Count; z++) {
            
Stilista stilista = this.GetStilista(z);
            for (
int j = 0; j < stilista.GetListaAbiti();j++) {
                
Abito abito = stilista.GetAbito(j);
                
bool trovato = false;
            for (
int m = 0; m <listaStilisti.Count; m ++) {
                
Stilista stilista2 = this.GetStilista(m);
                for(
int c = 0; c < stilista2.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


MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Black Friday HONOR, prezzi giù fi...
AliExpress sfida Amazon sui prezzi: e-bi...
Gemini sotto accusa in Ungheria: per l'a...
Windows 11 può girare sulla NPU invece d...
MediaWorld diventa cinese: l'UE dice s&i...
Akamai potenzia il proprio cloud con due...
Steam, Valve cambia le regole: le revisi...
Canva licenzia (anche) per colpa dell'IA...
Axerta: l’IA traina la crescita delle te...
Galaxy A38, la batteria cresce ma il pre...
Notifica su Facebook: 'Effettuerai la mi...
Xbox pronta a dire addio allo studio di ...
Meta stacca la spina: fine del supporto ...
Scambio file senza limiti: Google porta ...
Taiwan sbarca a EICMA 2026: maxi scooter...
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: 20:46.


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