none
Zählen von Elementen die mehrfach auftreten in einer Liste. RRS feed

  • Frage

  • Guten Tag,

    ich schreibe ein Programm das zahlen auswertet und in einer Liste speichert. die zahlen gehen nur von 0 bis 180, aber ich habe über 250000 davon. ich möchte nun das Vorkommen von jeder einzelnen Zahl wissen...

    also z.B. 
    eine Liste mit 10 Zahlen
    1;1;1;2;2;3;3;4;5;5;

    Ergebnis:
    1: 3 mal
    2: 2 mal
    3: 2 mal
    4: 1 mal
    5: 2 mal

    vielen Dank

    LG Lucas

    Dienstag, 6. März 2018 09:50

Antworten

  • Hallo Lucas,

    mit Linq geht es etwas anders.

    List<int> values = new List<int>() { 1, 1, 1, 2, 2, 3, 3, 3, 3 };
    
    var counts = from n in values
                      group n by n into r
                        select new
                        {
                            Value = r.Key,
                            NumberOfItems = r.Count()
                        };

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 6. März 2018 12:14
    Moderator
  • Hallo Lucas,

    so könnte es gehen 

    void NumberCounter()
    {
        Dictionary<int, int> dict = new Dictionary<int, int>();
        var num = new int[] { 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6 };
    
        foreach (var item in num)
        {
            if (dict.ContainsKey(item))
            {
                dict[item]++;
            }
            else
            {
                dict.Add(item, 1);
            }
        }
    }

    Auch eine Linq abfrage wäre möglich. Aber wenn Du den oberen Code direct bei der Analyse verwendest, sparst Du dir etwas Rechnerzeit 

    Edit:

    ein einfaches Array wäre natürlich auch möglich. Würde das ganze aber etwas komplizierter machen


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App


    Dienstag, 6. März 2018 10:30

Alle Antworten

  • Hallo Lucas,

    so könnte es gehen 

    void NumberCounter()
    {
        Dictionary<int, int> dict = new Dictionary<int, int>();
        var num = new int[] { 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6 };
    
        foreach (var item in num)
        {
            if (dict.ContainsKey(item))
            {
                dict[item]++;
            }
            else
            {
                dict.Add(item, 1);
            }
        }
    }

    Auch eine Linq abfrage wäre möglich. Aber wenn Du den oberen Code direct bei der Analyse verwendest, sparst Du dir etwas Rechnerzeit 

    Edit:

    ein einfaches Array wäre natürlich auch möglich. Würde das ganze aber etwas komplizierter machen


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App


    Dienstag, 6. März 2018 10:30
  • Hallo Lucas,

    mit Linq geht es etwas anders.

    List<int> values = new List<int>() { 1, 1, 1, 2, 2, 3, 3, 3, 3 };
    
    var counts = from n in values
                      group n by n into r
                        select new
                        {
                            Value = r.Key,
                            NumberOfItems = r.Count()
                        };

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 6. März 2018 12:14
    Moderator