myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Aus Array an Integers alle vorkommenden Zahlen zu gruppieren und ihre Anzahl ausgeben
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Aus Array an Integers alle vorkommenden Zahlen zu gruppieren und ihre Anzahl ausgeben

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
CoderboyPB CoderboyPB ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.01.2008
Beiträge: 196
Entwicklungsumgebung: Visualstudio 2019
Herkunft: Paderborn


CoderboyPB ist offline

Aus Array an Integers alle vorkommenden Zahlen zu gruppieren und ihre Anzahl ausgeben

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Aufgabe ist es aus einem Array an Integers alle vorkommenden Zahlen zu gruppieren und ihre Anzahl anzugeben.
Bsp: Wie viele Einsen, wie viele Dreien, etc ...

ich habe jetzt nach ewigen ausprobieren folgende Lösung gefunden:

C#-Code:
var diceGroups = dice.Distinct().GroupBy(d => d, d=>Array.FindAll(dice,a=>a==d).Count(), (key, result) => new
            {
                Number = key,
                Count = result}
            );

Wenn ich das jetzt wie folgt abfrage funktioniert das auch:

C#-Code:
foreach(var result in diceGroups)
            {

                Console.WriteLine($"Number: {result.Number} - Count: {result.Count.First()}");
            }

Aber warum ist Count in dem Ergebnis Object ein IEnumerable<int> anstatt eines einfachen int ???
Das ist ne Spur zu hoch für mich. Das muss doch auch irgendwie noch anders gehen, oder nicht?

Hab ja versucht die .NET Dokumentation zu bemühen, aber diesen Funktionssignaturen mit etlichen Generics, ja, verstehen tue ich es, aber ich ÜBERBLICKE es nicht. Bevor ich das Überblicke lerne ich lieber noch Barcode lesen ... großes Grinsen
21.04.2019 22:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.052
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Kurz: (key, result) Keyist Dein key und Result alle Treffer des Keys.
Mittel: Da die Treffer potentiell immer eine Liste sind (indexierter Zugriff alá Dictionary) muss Count zwangsläufig eben eine Liste sein.

Womöglich willst Du:

C#-Code:
{
   Number = key,
   Count = result.Count()
}

PS: in der Linq Schreibweise ist meiner Meinung nach GroupBy einfacher zu verstehen als in der Lambda-Schreibweise.
21.04.2019 22:59 Beiträge des Benutzers | zu Buddylist hinzufügen
CoderboyPB CoderboyPB ist männlich
myCSharp.de-Mitglied

Dabei seit: 09.01.2008
Beiträge: 196
Entwicklungsumgebung: Visualstudio 2019
Herkunft: Paderborn

Themenstarter Thema begonnen von CoderboyPB

CoderboyPB ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich danke dir.
Aber statt Count() muss da First() in das Select Object, sonst ist jeder Wert immer 1.

Die Aufgabenstellung ist übrigens Teil einer Kata aus Codewars.com:

Es wird ein Array mit 5 Würfelergebnissen übergeben, und für jeden Dreierpasch, gibt es den Würfelwert mal 100 als Punkte, also drei Zweier 200 Punkte, drei Dreier 300, usw ...

Ausnahme sind die Einer und 5er:

Drei Einer sind 1000 Punkte, und jeder einzelne Einer 100 Punkte.
Einzelne 5er, also unterhalb von dreien geben 50 Punkte.

Die Funktion soll die Punkte ausgeben.

Hatte erst ne 'Fußgängermethode' für die Häufigkeiten, aber ich will ja auch was dabei lernen, und so versuche ich halt auch solche Sachen wie Linq und co mit zuverwenden.
22.04.2019 00:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.052
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nicht alles mit Linq/Lambda ist besser, schneller oder übersichtlicher.
Lambda kann auch deutlich schlechter in Sachen Code Wartung oder Geschwindigkeit sein; "normale Schleifen" haben weiterhin ihre Daseinsberechtigung.
22.04.2019 01:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 13.10.2019 22:56