如何将数组中的每个Int值乘以Swift中的常量?
说,我有一个数组[20, 2, 3]
如何在Swift中乘以此数组的每个Int值?
那么2 x数组变为[40, 4, 6]
,3 x数组变为[60, 6, 9]
等等?
你可以使用.map()
:
let values = [20, 2, 3] let doubles = values.map { $0 * 2 } let triples = values.map { $0 * 3 }
如果要进行就地更新:
var values = [20, 2, 3] values.enumerate().forEach { index, value in values[index] = value * 2 } // values is now [40, 4, 6]
编辑:几年后回顾这个答案,我不认为这是运算符重载的特别好用 – [1, 2, 3] * 2
评估并不是很明显[1, 2, 3] * 2
[2, 4, 6]
而不是说[1, 2, 3, 1, 2, 3]
。
map
肯定是一个很好的方法 – 虽然如果你想在你的问题“ 2 x array变成…… ”中得到你要求的语法,你可以重载*
运算符。
如果数组的元素是可乘的且与标量相同的类型,这将允许您将数组乘以标量内联。
extension Array where Element : Numeric { static func * (lhs: Array, rhs: Element) -> Array { // Map through the array elements, multiplying each by the rhs argument. return lhs.map { $0 * rhs } } static func *= (lhs: inout Array, rhs: Element) { // Use an `inout` argument in order to multiply an array in-place. lhs = lhs * rhs } }
然后你可以像这样使用它:
let yourArray = [2, 3, 4] var arr = yourArray * 4 // arr = [8, 12, 16] arr *= 3 // arr = [24, 36, 48]
你可以使用for循环。
var array = [20, 2, 3] let multiplier = 2 for i in 0...array.count - 1{ array[i] = array[i] * multiplier }