12. oktober 2012 - 09:45Der 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.
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; } } }
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);
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 :-)
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.
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.
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.