私は配列を持っています[20, 2, 3]
Swiftでこの配列の各Int値をどのように乗算できますか?
2×アレイが[40, 4, 6]
になると、3×アレイが[60, 6, 9]
となるのですか?配列の各Int値にSwiftの定数を掛ける方法は?
2
A
答えて
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列になる...」のために尋ねた構文を取得したい場合も、あなたは*
演算子をオーバーロードできます。
これにより、配列の要素がスカラと同じ型で乗算可能である場合、配列にスカラ型のインラインで乗算することができます。
let yourArray = [2, 3, 4]
var arr = yourArray * 4 // arr = [8, 12, 16]
arr *= 3 // arr = [24, 36, 48]
:あなたはこのようにそれを使用することができます
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
}