从您问题的描述来看,nestedFunction(...)
的参数应该是一个具有双值元素的数组嵌套数组([[Double]]
),而不是一个具有双值元素的数组([Double]
)。
您可以使用 .flatten()
将您的简单嵌套数组 nestedArray
转换为 nestedFunction(...)
中的扁平化数组,然后使用例如 reduce
将扁平化数组的 Double
值元素转换为一个连接的 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)
请注意,由于浮点精度有限,一些双精度值可能会以“混乱”的
String
表示形式出现(例如,使用直接的
String
初始化程序(在上述第一种和第二种方法中分别为
String($1)
和
String(elem)
)时,
2.6
可能会变成
2.6000000000000001
)。为了解决这个问题,您可以为
Double
值的
String
表示设置固定数量的小数位数,使用以下
String
初始化程序:
String(format: "%.3f", myDoubleValue)
/* \
number of fraction digits (3 here) */
例如,在上述方法中,将
String($1)
和
String(elem)
替换为
String(format: "%.3f", $1)
和
String(format: "%.3f", elem)
,分别选择一些小数位数。
Double
值将四舍五入到提供的小数位数。