Averages/Simple moving average: Difference between revisions

Content added Content deleted
(Add Swift)
Line 4,210: Line 4,210:
}) displayNl
}) displayNl
]</lang>
]</lang>

=={{header|Swift}}==

{{trans|Rust}}

<lang swift>struct SimpleMovingAverage {
var period: Int
var numbers = [Double]()

mutating func addNumber(_ n: Double) -> Double {
numbers.append(n)

if numbers.count > period {
numbers.removeFirst()
}

guard !numbers.isEmpty else {
return 0
}

return numbers.reduce(0, +) / Double(numbers.count)
}
}

for period in [3, 5] {
print("Moving average with period \(period)")

var averager = SimpleMovingAverage(period: period)

for n in [1.0, 2, 3, 4, 5, 5, 4, 3, 2, 1] {
print("n: \(n); average \(averager.addNumber(n))")
}
}</lang>

{{out}}

<pre style="overflow: scroll; height: 25em">Moving average with period 3
n: 1.0; average 1.0
n: 2.0; average 1.5
n: 3.0; average 2.0
n: 4.0; average 3.0
n: 5.0; average 4.0
n: 5.0; average 4.666666666666667
n: 4.0; average 4.666666666666667
n: 3.0; average 4.0
n: 2.0; average 3.0
n: 1.0; average 2.0
Moving average with period 5
n: 1.0; average 1.0
n: 2.0; average 1.5
n: 3.0; average 2.0
n: 4.0; average 2.5
n: 5.0; average 3.0
n: 5.0; average 3.8
n: 4.0; average 4.2
n: 3.0; average 4.2
n: 2.0; average 3.8
n: 1.0; average 3.0</pre>


=={{header|Tcl}}==
=={{header|Tcl}}==