Gå til innhold

C#: finne antall forekomster av ulike tall i arrays


Anbefalte innlegg

Videoannonse
Annonse

int[] tall = { 1, 2, 5, 6, 7, 8, 6, 5, 2, 0, 1, 2, 3, 4, 5, 7, 8, 4 };
var result = (from c in Enumerable.Range(0, 6)
select new KeyValuePair<int, int>(c, tall.Count(i => i == c))
).Where(item => item.Value > 0)
.ToArray();

Eventuelt hvis du ikke bryr deg om tomme verdier

int[] tall = { 1, 2, 5, 6, 7, 8, 6, 5, 2, 0, 1, 2, 3, 4, 5, 7, 8, 4 };
var result = (from c in Enumerable.Range(0, 6)
select tall.Count(i => i == c)
).ToArray();

Endret av GeirGrusom
Lenke til kommentar

Eventuelt hvis man ikke vet hvilke temperaturer som vil komme:

 

var antall = tall.GroupBy(x => x) 
               .OrderBy(x=> x.First())  
               .Select(x => new { Antall = x.Count(), Temperatur = x.First() }); 


foreach (var a in antall)
   Console.WriteLine(string.Format("{0} forekommer {1} ganger", a.Temperatur, a.Antall ));

Endret av MailMan13
Lenke til kommentar

Han hadde allerede fått et bra og fungerende svar, så da er det greit å vite hvordan det enklest kan gjøres. Og hvis du bryter dem ned, er de ikke spesielt avanserte. Det min gjør, er å lage en tenkt liste fra 0 til og med 5, gå igjennom hvert tall, og gi ut hvor ofte de forekommer i listen. MailMan13 sin grupperer tallene etter sin verdi, og teller hvor mange det blir i hver gruppe.

Lenke til kommentar

Effektivt er det nok, men bør man kanskje ikke ha grunnleggende forståelse for arrays for/while løkker, if setninger, hva en funksjon/metode er osv før man trer inn i LINQ sine rekker?

 

LINQ benytter det mest avanserte i språket til å kode ting kort og "enkelt". Tilogmed anonyme klasser for folk som knapt vet hvordan bruke klasser generelt.

 

Nå antar jeg dette er nivået til OP.

 

Ville nå uansett ikke prøvd å forklare LINQ til en som akkurat har begynt å se på hva en for løkke er og hvordan kombinere dette med en array.

 

Min mening.

Lenke til kommentar

Anonyme funksjoner er vel noe av det første du lærer i funksjonell programmering. Konseptet er strengt tatt ikke noe mer komplisert enn en for løkke. Det er bare en litt annen måte å tenke på. LINQ trenger dermed ikke være noe mer komplisert enn noe annet. Kraftig ja, men det er noe av funksjonelle språks natur (ikke at LINQ i seg selv er et funksjonelt språk, men det har mye til felles med en del ting i f.eks F#) ;)

Endret av The Jackal
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...