Array Gymnastik
HejJeg har lavet et mail program, hvor afsendere kan sende mails til mig. Jeg finder afsender ved at indlæse fra en mySQL database ved brug af Idatareader. Jeg finder antallet af mails pr afsender gennem metoden GentAntalMailsPrAfsender
Disse værdier indlæses i et data transport objekt mailDTO.
Mit problem er nu, at hvis peter har sendt mig 5 mails, så står der peter 5, 5 gange. Og da jeg skal sortere og finde de 3 afsendere som har sendt flest mails, skal jeg bruge et array, hvor afsenderne kun optræder en gang. Dvs.
peter 5
anna 4
troels 3
nede i forlykken har jeg forsøgt noget men det virker ikke rigtigt. Så mit spørgsmål er, hvordan fjerner jeg de 4 andre forekomster af peter 5, så han kun optræder en gang og sorterer så han der har sendt flest mails står først?
I metoden her har jeg sorteret efter afsender.
Jeg er i tvivl om man kan bruge IComparer. Den opererer med nøgler og kan vist sortere i descending order.
public FlestMailsDTO[] GetAntalMailsPrAfsender(string mailAdresse_til)
{
IDataReader mailDataReader;
MailGateway mailGW;
FlestMailsDTO mailDTO;
//Data Transfer Objekt
ArrayList mailArr;
FlestMailsDTO[] flestMailsDTOArr;
//Array af Data Transfer Objekter
string afsender = null;
//skaber nyt array af mailDTO'er
mailGW = new MailGateway();
mailGW.OpenConnection();
mailDataReader = mailGW.FindEmails(mailAdresse_til);
mailArr = new ArrayList();
while(mailDataReader.Read() == true)
{
mailDTO = new FlestMailsDTO();
mailDTO.mailAdresse_fra = (string)mailDataReader ["afsender"];
afsender = mailDTO.mailAdresse_fra;
mailDTO.antal = MailTM.GetAntalMailsPrAfsender(mailAdresse_til, afsender);
mailArr.Add(mailDTO);
}
flestMailsDTOArr = (FlestMailsDTO[])mailArr.ToArray(typeof(FlestMailsDTO));
Array.Sort(flestMailsDTOArr);
for(int i = 1; i < flestMailsDTOArr.Length;i++)
{
if(flestMailsDTOArr[i].mailAdresse_fra.Equals(afsender))
{
flestMailsDTOArr[i]=flestMailsDTOArr[i-(i-1)];
}
}
mailGW.CloseConnection();
return flestMailsDTOArr;
}