2016-05-15 77 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] 
相關問題