Avatar billede atd Nybegynder
18. januar 2011 - 22:42 Der er 9 kommentarer og
1 løsning

Retunere summen af alle lige tal i et array t

Jeg har brug for at skrive en metode

public static long Sum(int[] t)
{
   
}

der kan returnere summen af alle lige tal i et array t
Avatar billede Syska Mester
18. januar 2011 - 22:51 #1
Med LINQ kan du gøre sådan her:
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var sum = array.Where(a => a % 2 == 0).Sum();

Husk en using i toppen:
using System.Linq;

mvh
Avatar billede Trollekrogen Nybegynder
18. januar 2011 - 23:15 #2
{
            int sum = 0;
            int[] t = new int[] { 12, 2, 25, 8 };
            for (int i = 0; i < t.Length; i++)
            {
                if(0==t[i]%2)
                {
                    sum = sum + t[i];
                }
            }
            Console.WriteLine("Sum= " + sum);
        }
Avatar billede atd Nybegynder
19. januar 2011 - 08:20 #3
Tak for det Begge 2. Linq kender jeg godt, men er ikke inde i det. Så Point går til Trollekrogen.
Avatar billede atd Nybegynder
19. januar 2011 - 08:24 #4
Det er lang tid siden jeg har anvendt Eksperten. Hvad skal der gøres for at man kan give pointene? Ser ud som om jeg kun kan give mig selv point, når jeg har valgt svar(Til løsninger og pointgivning). Jeg er klar til og give dem nu
Avatar billede Trollekrogen Nybegynder
19. januar 2011 - 09:51 #5
Jeg lægger et svar.
Avatar billede janus_007 Nybegynder
19. januar 2011 - 12:07 #6
På mig virker det ekstremt besynderligt at tildele point til den ældste og besværligste løsning.

Hvorfor dog bruge 7-8 linjer kode på noget som kan skrives på en:

var sum = array.Where(a => a % 2 == 0).Sum();
som buzzz foreslog?

Du bliver jo overhalet indenom hvis du ikke følger med sprogets udvikling.

Endda hvis man blot vil gå tilbage før Linq (.NET 2) ville man gøre sådan her:
int[] array =  { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

int[] result = Array.FindAll(array, delegate(int i) { return (i % 2) == 0;});

Men altså ligefrem at bevæge sig helt tilbage til .NET 1 hmmm.... den kræver en god forklaring ;-)
Avatar billede atd Nybegynder
19. januar 2011 - 12:17 #7
Tjah. Hvis nu dette forum skulle bruges til hele tiden og begrunde sine ønsker. Så kan jeg ikke se, at du på noget tidspunkt kan blive stillet tilfreds.
Du er givetvis dygtig til det du laver. Men der er nogen som måske er på et andet niveau end dig. Så bland dig uden om, hvis ikke du er tilfreds med denne tråd. Trollekrogen kom med det svar jeg havde brug for, men er glad for at Buzz kom med hans gode forslag. Jeg ved ikke hvilken forklaring du mener du er beretiget til!
Jeg kommenterer ikke yderligere på dette.
Avatar billede Syska Mester
19. januar 2011 - 13:40 #8
#atd
Hvis du alligevel kender LINQ ... hvorfor så ikke bruge min, reelt set kun en linje, da du modtager array listen som parameter, og så er den super overskuelig. Hvis du har 1000000 elementer i den kan du smides ud på flere kerner og du kan opnå bedre performance.

Du må huske på, at kode nok skal vedligeholdes senere.

Det er bare mine argumenter, men selvfølgelig op til dig hvordan du vil gøre.

mvh
Avatar billede janus_007 Nybegynder
22. januar 2011 - 20:06 #9
ATD -> Ligegyldigt hvad du siger, så kan du aldrig argumentere din dovenskab med at andre er dygtigere end dig... du afviser jo nærmest kategorisk at løse opgaven bedst muligt.

Du er faktisk iblandt nogle dygtige mennesker her på Eksperten, så brug dem og udvid din viden istedet for at flette videre på oldtidskundskab :)
Avatar billede Syska Mester
22. januar 2011 - 20:17 #10
#janus_007
Udover jeg måske ville have sagt på det en lidt anden måde, så er jeg helt enig. Overstående  mindre om C/C++ hvor der er ikke andre muliheder ( jo, måske frameworks ) men her er det indbygget, så ingen grund til at gøre det mere besværligt,

LINQ kan være svært hvis det bliver meget komplekst, så kan det være svært at gennenskue, men lige netop den her er jo ligetil.

Det kan oversættes:
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // Her er dig array;
var sum = array.Where(a => a % 2 == 0).Sum();
// Løb dit array igennem og tag alle værdier hvor "tallet mod 2 er 0" og smid den i en IQuryable<int> varialble.
// Dernæst løb den IQueuable<int> igennem og tag summet af det.

Så har du også en forklaring på hvad der sker. Du ser ikke en præsentation eller meget fra MS hvor der ikke bliver brugt LINQ, netop fordi det er så dejlig nemt at udtrykke tidligere kedelige ting, netop som at tage alle lige tal.

Men igen ... op til dig, omend de fleste nok ville foretrække LINQ.

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester