Averages/Simple moving average: Difference between revisions

Add Swift
(Add Swift)
Line 4,210:
}) displayNl
]</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}}==