2016-05-15 35 views

回答

10

您可以使用.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

您可以使用一个for循环。

var array = [20, 2, 3] 
    let multiplier = 2 

    for i in 0...array.count - 1{ 
     array[i] = array[i] * multiplier 
    } 
4

map绝对是一个很好的路要走 - 但如果你想,你在你的问题问的语法“2×阵列变成...”,你可以重载*操作。

如果数组的元素是可多项式和与标量相同的类型,这将允许您通过标量内联乘数组。

protocol Multipliable { 
    func *(lhs:Self, rhs:Self) -> Self 
} 

// add any additional types that you want to be multipliable here 
extension Int:Multipliable {} 
extension Double:Multipliable {} 
extension Float:Multipliable {} 

// map through the array elements, multiplying each by the rhs argument 
func *<T:Multipliable>(lhs:[T], rhs:T) -> [T] { 
    return lhs.map {$0 * rhs} 
} 

// use an inout argument in order to multiply an array in-place 
func *=<T:Multipliable>(inout lhs:[T], rhs:T) { 
    lhs = lhs*rhs 
} 

然后,您可以使用它像这样:

let yourArray = [2, 3, 4] 

var arr = yourArray * 4 // arr = [8, 12, 16] 

arr *= 3 // arr = [24, 36, 48] 
相关问题