peachplayer Geschrieben 24. Oktober 2018 Melden Share Geschrieben 24. Oktober 2018 Hallo Leute, Weiss jemand zufällig wie man von einer generischen Liste Zwischensummen bilden kann? Das List-Objekt sieht so aus: public class KostenEintrag { int Nummer; string Parzellenname; float Kosten_d; float Kosten_pf; float Kosten_f; float totaleKosten; public KostenEintrag(int nr, string v, float kd, float kpf, float kf) { Nummer = nr; Parzellenname = v; Kosten_d = kd; Kosten_pf = kpf; Kosten_f = kf; } public int GetNummer() { return Nummer; } public string GetParzellenname() { return Parzellenname; } public float GetKosten_d() { return Kosten_d; } public float GetKosten_pf() { return Kosten_pf; } public float GetKosten_f() { return Kosten_f; } public bool GroesserAls(float neu) { if (Nummer > neu) return true; else return false; } public float Summebilden() { totaleKosten = Kosten_d + Kosten_pf + Kosten_f; return totaleKosten; } } Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 24. Oktober 2018 Melden Share Geschrieben 24. Oktober 2018 Du meinst sowas wie var total = kostenEintragListe.Sum(eintrag => eintrag.Summebilden()); ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 24. Oktober 2018 Autor Melden Share Geschrieben 24. Oktober 2018 Hallo Sascha Ich verwende folgenden Code: void ListeAnzeigen() { string NummerAusgabe = ""; string ParzellennameAusgabe = ""; string KostenAusgabe = ""; string totaleKostenAusgabe = ""; float Kostentotal = 0.0f; float Kostensumme = 0.0f; for (int i = 0; i < liste.Count && i < 20; i++) { NummerAusgabe += liste[i].GetNummer() + "\n"; ParzellennameAusgabe += liste[i].GetParzellenname() + "\n"; KostenAusgabe += liste[i].GetKosten_d() + liste[i].GetKosten_pf() + liste[i].GetKosten_f() +"\n"; //if (liste[i].GetParzellenname() == liste[i+1].GetParzellenname()) // KostenAusgabe += liste[i].Summebilden()+liste[i+1].Summebilden() + "\n"; // else // KostenAusgabe += liste[i].Summebilden() + "\n"; } NummerAnzeige.text = NummerAusgabe; ParzellennameAnzeige.text = ParzellennameAusgabe; KostenAnzeige.text = KostenAusgabe; totaleKostenAnzeige.text = "Totale Kosten = " + Kostentotal; PlayerPrefs.SetFloat("Kosten_total", Kostentotal); } Damit möchte ich die Kosten von allen Listen-Einträge(liste) mit gleichem Parzellennamen aufsummieren. Leider geht das (noch) nicht! Kann mir jemand helfen? Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 24. Oktober 2018 Melden Share Geschrieben 24. Oktober 2018 Ja, das war halt schon klar. Wo ist das Problem mit dem vorgeschlagenen Code? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 24. Oktober 2018 Autor Melden Share Geschrieben 24. Oktober 2018 ...die Funktion Sum kenne ich nicht in Unity! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 24. Oktober 2018 Melden Share Geschrieben 24. Oktober 2018 ...gibt's aber? https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.sum Darfst natürlich nicht das using System.Linq; vergessen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 24. Oktober 2018 Autor Melden Share Geschrieben 24. Oktober 2018 danke! Jetzt hatts geklappt....nur weiss ich noch nicht wie man Teilsummen von 2 aufeinanderfolgenden Datensätzen bilden kann. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 24. Oktober 2018 Melden Share Geschrieben 24. Oktober 2018 Das wird mit Linq wohl eher nichts, aber wie wäre es mit sowas? public void Teilsumme(int index0) { return liste[index0] + liste[index0 + 1]; } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 24. Oktober 2018 Autor Melden Share Geschrieben 24. Oktober 2018 danke für die Antwort. Leider klappt es immer noch nicht ganz! Das Resultat sieht jetzt so aus! Es stimmt leider nur das Endresultat! Hier noch der dazugehörige Code: void ListeAnzeigen() { string NummerAusgabe = ""; string ParzellennameAusgabe = ""; string KostenAusgabe = ""; string totaleKostenAusgabe = ""; float Kostentotal = 0.0f; string Kostensumme = ""; for (int i = 0; i < liste.Count && i < 20; i++) { NummerAusgabe += liste[i].GetNummer() + "\n"; ParzellennameAusgabe += liste[i].GetParzellenname() + "\n"; KostenAusgabe += liste[i].Summebilden() + "\n"; Kostensumme = liste.Sum(eintrag => eintrag.Summebilden()) + "\n"; KostenAusgabe += liste.Sum(s => { if (s.GetParzellenname() == "Fahlrüti1") return s.Summebilden(); else if (s.GetParzellenname() == "Suchern1") return s.Summebilden(); else if(s.GetParzellenname() == "Studenacker1") return s.Summebilden(); else if(s.GetParzellenname() == "Wille1") return s.Summebilden(); else if (s.GetParzellenname() == "Zuchern") return s.Summebilden(); else return 0; }) + "\n"; } NummerAnzeige.text = NummerAusgabe; ParzellennameAnzeige.text = ParzellennameAusgabe; KostenAnzeige.text = KostenAusgabe; totaleKostenAnzeige.text = "Totale Kosten = " + Kostensumme; PlayerPrefs.SetFloat("Kosten_total", Kostentotal); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 24. Oktober 2018 Melden Share Geschrieben 24. Oktober 2018 Ich sehe jetzt nirgendwo, dass du da liste[ i ] + liste[i + 1] rechnen würdest. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 25. Oktober 2018 Autor Melden Share Geschrieben 25. Oktober 2018 Hallo Sascha Jetzt hat alles wunderbar geklappt! Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jolinah Geschrieben 25. Oktober 2018 Melden Share Geschrieben 25. Oktober 2018 Du kannst mit Linq auch nach Parzellennamen gruppieren: var parzellen = liste.GroupBy(item => item.GetParzellenname()); foreach (var parzelle in parzellen) { // Code der pro Parzellenname ausgeführt wird // parzelle enthält alle Einträge der jeweiligen Parzelle string parzellenName = parzelle.Key; float parzellenSumme = parzelle.Sum(item => item.Summebilden()); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
peachplayer Geschrieben 25. Oktober 2018 Autor Melden Share Geschrieben 25. Oktober 2018 Danke für die Antwort! Leider ist der Output noch nicht ganz so wie er sollte! Es werden zuviele DB pro Parzellen und Kosten aufgelistet. Kann mir jemand helfen? Gruss, peachplayer Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.