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}}== |