Mittelwert aus Array ermitteln

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mittelwert aus Array ermitteln

    Hallo zusammen,

    ich bin sehr neu in der Appprogrammierung (swift, xcode 8.2.1) unterwegs und brauche daher eure Hilfe.
    Ich fülle ein Int-Array mit verschiedenen Int-Werten (1-30 Werte, immer unterschiedlich)

    Wie kann ich nun einen Mittelwert/Durchschnitt der enthaltenen Werte erzeugen?

    Das eintragen der Werte und auch das auslesen klappt aber das Problem besteht darin, dass ich ja nicht weiß wie viele Werte im Array aktuell vorhanden sind.
    Die Anzahl brauche ich aber um zu wissen wie viele Indexe ich auslesen muss und welcher der Quotient ist, den ich brauche um den Mittelwert zu berechnen.

    Gibt es da auch eine art "foreach" funktion?

    Das Berechnen wäre dann kein Problem. Es geht nur ums auslesen (welche und wie viele).

    Ich bin über jede Hilfe dankbar!


    Zur Info:
    Das Array befülle ich mit:

    C-Quellcode

    1. var ballschris = [Int]()
    2. ballschris.append(Int(lablballschris.text!)!)
  • Hallo Christopher,

    Du erhältst die Anzahl der Werte in Deinem Array über ballschris.count
    Um die Summe der einzelnen Werte zu erhalten, greifst Du einfach über eine for-schleife auf jedes einzelne Element zu.

    Ich kenne mich mit der Swift-Syntax nicht so aus, aber gem. Erfahrung aus anderen Sprachen sieht es ungefähr so aus:

    Quellcode

    1. for (id = 0; ballschris[id]; id++) {
    2. //Dein Zeug
    3. }
    Die Summe teilst Du dann entsprechend durch die Anzahl der Werte.


    Ich hoffe, ich konnte Dir helfen.

    Liebe Grüße,
    Max
  • Für die Summe der Elemente drängt sich die reduce-Funktion doch geradezu auf.

    Also so:

    Quellcode

    1. var array = [1, 2, 3, 4]
    2. let sum = array.reduce(0){ $0 + $1 }
    3. let average = Double(sum) / Double(array.count)
    4. print(sum) // 10
    5. print(average) // 2.5
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • Danke für eure Hilfe!
    mit ballschris.count zähle ich nun wie viele einträge im Array sind.
    Mit

    Quellcode

    1. let sumchris = GlobalVariables.collectionballschris.reduce(0, +)

    GlobalVariables deshalb, da ich eine Globale Variable erzeugt habe.

    Mit

    Quellcode

    1. labeldurchschnittchris.text = String(format: "%.2f", Float(sumchris) / Float(anzahlgameschris))
    errechne ich dann den Durchschnitt und kürze (! nicht runden, sondern truncate) ich den Durchschnitt schreib das Ergebnis auf ein Label.


    Vielen Dank für die Hilfe. Hiermit schließe ich das Thema.
  • christopherhahlbeck schrieb:

    Mit

    Quellcode

    1. labeldurchschnittchris.text = String(format: "%.2f", Float(sumchris) / Float(anzahlgameschris))
    errechne ich dann den Durchschnitt und kürze (! nicht runden, sondern truncate) ich den Durchschnitt schreib das Ergebnis auf ein Label.


    Vielen Dank für die Hilfe. Hiermit schließe ich das Thema.
    Nein, die printf-like Formate, wie sie auch in der Foundation sind runden kaufmännsich. Wenn du abrunden willst, kannst du hier

    Quellcode

    1. String(format: "%.2f", Float(sumchris) / Float(anzahlgameschris) - 0.005)
    verwenden.
    „Meine Komplikation hatte eine Komplikation.“
  • christopherhahlbeck schrieb:


    errechne ich dann den Durchschnitt und kürze (! nicht runden, sondern truncate) ich den Durchschnitt schreib das Ergebnis auf ein Label.
    Wie schon vom moonshiner geschrieben geschrieben wird gerundet. kommt wohl daher (zum glück haben sie da nicht wieder mal ihr eigenes süppchen gekocht!):






    C99 §7.19.6.1 The fprintf function

    f,F
    A double argument representing a floating-point number is converted to decimal notation in the style [−]ddd.ddd, where the number of digits after the decimal-point character is equal to the precision specification. If the precision is missing, it is taken as 6; if the precision is zero and the # flag is not specified, no decimal-point character appears. If a decimal-point character appears, at least one digit appears before it. The value is rounded to the appropriate number of digits.