var number: [Int] = [1,2,3,4]
var newArray: [Int] = []
for i in 0...number.count-1{
newArray = number[i] * number[i 1]
}
print(newArray)
我想要這樣的輸出:[1 * 2, 2 * 3, 3 * 4]。
就是不明白問題出在哪里...
uj5u.com熱心網友回復:
var number: [Int] = [1,2,3,4]
let things = zip(number, number.dropFirst()).map(*)
每當您需要將 [1, 2, 3, 4] 之類的東西變成對 (1, 2), (2, 3) 等時,AdjacentPairs 方法很有用 - 在 Swift Algorithms 包中 - https://github.com /apple/swift-algorithms/blob/main/Sources/Algorithms/AdjacentPairs.swift
或者您可以zip使用它的集合dropFirst來獲得相同的結果。
每當您需要將[A]s 轉換為[B]s時,請map使用將 As 轉換為 Bs 的函式。所以在這個例子中,你想通過乘法將 Int 元組陣列,如 [(1,2), (2,3), (3,4)] 轉換為 Int 陣列,如 [2, 6, 12] 2個整數在一起,map所以*
以這種方式撰寫它的好處是您可以避免陣列突變、索引值錯誤、陣列末端耗盡等問題,并且如果您在沒有索引和分配的情況下表達它通常更容易閱讀和思考。
uj5u.com熱心網友回復:
編譯器標記您的問題是您將單個Int值分配給Int. 以下行將解決該直接問題:
newArray.append(number[i] * number[i 1])
這應該會通過編譯,但會在執行時產生運行時錯誤。原因是當你嘗試 fetchnumber[i 1]時i == number.count-1,你實際上是 fetch number[number.count]。從 0 開始的索引不存在此條目。要從 4 個陣列條目中獲得 3 個和,您的回圈應該迭代 3 次:
for i in 0 ..< number.count-1 {
或者,如果您更喜歡封閉范圍:
for i in 0 ... number.count-2 {
map正如@Dris 建議的那樣,一種更快捷的方式是使用。for 的回傳型別map由乘法的結果隱式給出,因此您可以撰寫:
let newArray = number.indices.dropLast().map { i in
number[i] * number[i 1]
}
uj5u.com熱心網友回復:
您可以使用map()
let numbers = [1,2,3,4]
let newArray = numbers.enumerated().map { $1 * numbers[($0 1) % numbers.count] }
uj5u.com熱心網友回復:
可能你不應該回圈到 count-1 而是在之前停止并將結果添加到 array :
for i in 0..<number.count-1 {
newArray.append(number[i] * number[i 1])
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467850.html
上一篇:在for回圈中替換多行字串
下一篇:根據回圈值將專案添加到串列c#
