|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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 |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
Nel secondo for devi ovviamente saltare l'indice che stai confrontando, altrimenti quello darà sempre esito positivo. |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
Quote:
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22 |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
grazie 1000!ma nn va lo stesso!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22 |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
Quote:
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. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Codice PHP:
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
Quote:
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22 |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
Codice PHP:
|
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
Quote:
0---->0 [75557] 0---->0 [58974] 0---->0 [35877] nuovo.Codice nn lo stampa; Codice PHP:
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22 |
|
|
|
|
|
|
#11 |
|
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? |
|
|
|
|
|
#12 |
|
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:
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22 |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
Quote:
Codice PHP:
la variabile k la incrementa j no,strano!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22 |
|
|
|
|
|
|
#14 |
|
Senior Member
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();
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? |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
Quote:
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22 |
|
|
|
|
|
|
#16 |
|
Senior Member
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. |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
grazie a tutti per i suggerimenti!ho risolto!
__________________
trattative concluse con :Beta7-Jok3r88-pchs-giova22 |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 1049
|
Quote:
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. |
|
|
|
|
|
|
#19 |
|
Senior Member
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
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Jan 2009
Messaggi: 426
|
Quote:
Codice PHP:
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. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:05.




















