Avatar billede LeChox Nybegynder
12. oktober 2012 - 09:45 Der er 9 kommentarer og
1 løsning

Konverter liste med brugere til Dictionary

Beklager overskriften, kunne ikke lige komme på noget mere beskrivende, uden at det blev til en hel roman.

Jeg koder i C# ASP.NET (MVC 3) og min situation er som følger:

Jeg har et databaseudtræk som giver mig en masse brugere, inklusiv oprettelses dato på disse. Ud fra de informationer, skal jeg have lavet et Dictionary<DateTime, int> hvor der skal indsættes hver unik oprettelsesdato (DateTime) og antallet af oprettede brugere på den dato (int). Eksempel:
Listen over brugere indeholder 11 rækker bestående af 3 brugere som er oprettet d. 16-4-2012, 1 bruger som er oprettet d. 19-4-2012, og 7 brugere som er oprettet d. 26-4-2012. Til mit Dictionary skal der så tilføjes:
16-4-2012 , 3
19-4-2012 , 1
26-4-2012 , 7

Håber i forstår..

Jeg kan ikke rigtig finde ud af hvordan jeg skal køre dem igennem.. Nogen der har et forslag? Skal ikke nødvendigvis bruge noget kode, bare et skub i den rigtige retning mht. fremgangsmåde.

På forhånd tak!
- Kristoffer
Avatar billede Syska Mester
12. oktober 2012 - 10:08 #1
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            var random = new Random();
            var list = new List<User>();
            for (int i = 0; i < 1000; i++)
            {
                var next = random.Next(0, 10000);

                var created = DateTime.Now.AddMinutes(next);

                var user = new User(created, next);

                list.Add(user);
            }


            var dictionary = list.GroupBy(x => x.Created.Date).ToDictionary(x => x.Key, x => x.Count());


            foreach (var i in dictionary.OrderBy(x => x.Key))
            {
                Console.WriteLine("{0} => {1}", i.Key, i.Value);
            }
        }
    }

    public class User
    {
        public DateTime Created { get; set; }
        public int UserId { get; set; }

        public User(DateTime created, int userId)
        {
            Created = created;
            UserId = userId;
        }
    }
}
Avatar billede bvli Praktikant
12. oktober 2012 - 10:47 #2
var databaseResult = new List<Tuple<DateTime, string>>
{
    { DateTime.Now.AddDays(-5).Date, "Svend" },
    { DateTime.Now.AddDays(-5).Date, "Bent"  },
    { DateTime.Now.AddDays(-4).Date, "Hans"  },
    { DateTime.Now.AddDays(-4).Date, "Jørgen"},
    { DateTime.Now.AddDays(-3).Date, "Søren" },
    { DateTime.Now.AddDays(-3).Date, "Berit" },
    { DateTime.Now.AddDays(-3).Date, "Lis"  },
};

var groups = from entry in databaseResult
            group entry by entry.Item1 into dates
            select new { Date = dates.Key, Count = dates.Count(), Users = string.Join(", ", from entry in dates select entry.Item2) };
           
foreach (var date in groups)
{
    Console.WriteLine("Date: '{0:d}', Count: {1}, Users: '{2}'.", date.Date, date.Count, date.Users);
}

var result = groups.ToDictionary(entry=> entry.Date, entry => entry.Count);
Avatar billede LeChox Nybegynder
23. oktober 2012 - 09:43 #3
Fik det desværre ikke til at virke, men tak for forsøget! :-)
Avatar billede Syska Mester
23. oktober 2012 - 11:16 #4
Overstående virker, så hvad er problemet?

Stiller et spm og selv tager point, giver dårlig karma. Det er meget ilde set og vil følge dig i al fremtid på eksperten.

Men hvad var det som ikke virkede? Så må vi jo finde en løsning.
Avatar billede bvli Praktikant
23. oktober 2012 - 11:44 #5
:) Manden har stillet 3 spørgsmål her på eksperten og selv taget point på dem alle.
Avatar billede Syska Mester
23. oktober 2012 - 11:48 #6
Han kan i hvert fald komme på min ignore liste hvis det ikke ændre sig.
Avatar billede LeChox Nybegynder
25. oktober 2012 - 15:09 #7
Beklager det sene svar, havde slet ikke opdaget, at der var kommet flere indlæg. Da jeg skrev, at jeg ikke nødvendigvis havde brug for noget kode, mente jeg faktisk, at jeg hellere ville have en teoretisk forklaring, da jeg er relativt ny inden for det her. Jeg beklager dybt, at jeg ikke udtrykte mig ordenligt.
Angående point må i hjertens gerne få dem, for mig er de intet - jeg har førhen begået mig på et site hvor man smed svar i første omgang hvis man gerne ville have point, og det selvfølgelig fuldkommen min fejl at jeg ikke lige havde fået banket det ud af hovedet, det beklager jeg :-) Som sagt vil jeg meget gerne give jer de point, men ved ikke helt hvordan det foregår her på sitet - umiddelbart ser det ud til, at folk bare opretter en ny tråd til det, korrekt?

Og nu vi er ved det, kan i måske svare mig på, om man her på siden plejer at give folk point for, at prøve og hjælpe - selvom svaret ikke nødvendigvis løser problemet? Eller er det kun hvis problemet rent faktisk bliver løst på baggrund af svaret? For hvis det første er tilfældet, skal jeg vidst lige omkring min første tråd igen :-)

Beklager meget ulejligheden.
Fortsat god dag.

Mvh
Kristoffer Nielsen
Avatar billede Syska Mester
25. oktober 2012 - 15:17 #8
Jeg mener en hjælpende hånd er løsningen ... for at kaste folk i mål. Husk, man skal læse en mand at fikse og ikke lave opgaver for ham.

Men der kan jo være grunde til at give mindre point, hvis man også selv har givet til opgaven eller flerre folk måske har været fælles om at løse den.

Efter koden kom, så måtte du jo sprøge inde til hvad der sker ... for mig at se er koden rimelig nem at læse, så jeg ved ikke rigtig hvad jeg kunne foreklare som ikke allerede er i koden.
Avatar billede LeChox Nybegynder
25. oktober 2012 - 15:49 #9
Jeg er bl.a. ikke vandt til at bruge LINQ, hvilket gør koden lidt sværere at tyde for mig, da jeg endnu ikke ved hvordan den slags hænger sammen. Derudover er jeg generelt stadig dårlig til at læse andre folks kode, da jeg indtil videre næsten kun har beskæftiget mig med min egen - Dette er også grunden til at jeg næsten altid spørger efter en teoretisk forklaring af fremgangsmåde, frem for at folk giver mig noget kode, og jeg så skal døje dem med spørgsmål omkring hvordan det hænger sammen.

Det skal dog siges, at jeg lige har fået en god ven til at sætte mig ind i hvad der nogenlunde sker i begge jeres eksempler. Som udgangspunkt tror jeg, at jeg ville foretrække den første, men umiddelbart kan de vidst begge integreres i mit projekt, den sidste dog med lidt flere tweaks.

Jeg har oprettet tråden http://www.eksperten.dk/spm/971132 hvor i begge to meget gerne må smide et svar, så i kan få jeres point.

Håber i kan bære over med mig, og vil tage imod min undskyldning :-)

Mvh
Kristoffer Nielsen
Avatar billede Syska Mester
25. oktober 2012 - 19:58 #10
Helt iorden :-)
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