從你的問題看來,如果的nestedFunction(...)
的參數應該是一個陣列具有雙值元素([[Double]]
),而不是一個陣列具有雙值元素([Double]
)陣列的描述。
你可以利用.flatten()
來簡單的嵌套數組nestedArray
在nestedFunction(...)
,然後例如reduce
將平坦陣列的重要元素轉換爲一個集中的String
。
var array1 = [2.6, 6.7, 7.2, 4.1, 3.1]
var array2 = [1.2, 3.5, 2.8, 4.5, 6.4]
var array3 = [1.2, 1.3, 1.4, 1.5, 1.6]
var nestedArray = [array1, array2, array3]
func nestedFunction (nestedArray: [[Double]])-> String {
return String(nestedArray
.flatten()
.reduce("") { $0 + ", " + String($1) }
.characters.dropFirst(2))
}
let asString = nestedFunction(nestedArray)
// asString = "2.6, 6.7, 7.2, 4.1, 3.1, 1.2, 3.5, 2.8, 4.5, 6.4, 1.2, 1.3, 1.4, 1.5, 1.6"
作爲替代方案,如果你在使用for
環設置,可以將扁平陣列上使用for ... in
,例如:
var array1 = [2.6, 6.7, 7.2, 4.1, 3.1]
var array2 = [1.2, 3.5, 2.8, 4.5, 6.4]
var array3 = [1.2, 1.3, 1.4, 1.5, 1.6]
var nestedArray = [array1, array2, array3]
func nestedFunction (nestedArray: [[Double]])-> String {
var stringVar: String = ""
var isFirstElement = true
for elem in nestedArray.flatten() {
stringVar += (isFirstElement ? "" : ", ") + String(elem)
isFirstElement = false
}
return stringVar
}
let asString = nestedFunction(nestedArray)
// asString = "2.6, 6.7, 7.2, 4.1, 3.1, 1.2, 3.5, 2.8, 4.5, 6.4, 1.2, 1.3, 1.4, 1.5, 1.6"
注意,由於有限的浮點精度,一些當使用直接String
初始值設定項(上面的String($1)
和String(elem)
,分別在第一個和第二個方法中)時,雙值可能以「凌亂」String
表示形式(例如2.6
可能最終爲2.6000000000000001
)結束。要兌換此您可以設置的小數位數的固定數目爲您Double
值的String
表示,使用以下String
初始化:
String(format: "%.3f", myDoubleValue)
/* \
number of fraction digits (3 here) */
例如,上面分別String(format: "%.3f", $1)
和String(format: "%.3f", elem)
,替換方法String($1)
和String(elem)
,爲您選擇的一些小數位數。 Double
值將四捨五入爲提供的小數位數。
您能告訴我們預期的產量嗎? –
是的,我也很困惑。我需要創建一個函數,它以一個雙精度數組數組作爲參數並返回一個字符串對象。然後遍歷每個內部數組,並將內部數組的每個元素連接成一個String對象。但我不知道如何去做。 – art3mis
好的謝謝:) – art3mis