如何将一个数组的双精度数组转换为字符串,Swift
我有一个双精度数组的数组。你如何将它转换为控制台上打印的单个字符串?如何将一个数组的双精度数组转换为字符串,Swift
我需要创建一个函数,它以一个双精度数组数组作为参数并返回一个字符串对象。然后遍历每个内部数组,并将内部数组的每个元素连接成一个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 {
var stringVar: String = ""
(for loop here...)
return stringVar
}
print(nestedArrayFunction(nestedArray))
预期的输出应该是字符串对象,不带括号
从你的问题看来,如果的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
值将四舍五入为提供的小数位数。
阵列符合CustomStringConvertible
,所以你可以用它description
属性:
nestedArray.description
输出:
[[2.6000000000000001,6.7000000000000002,7.2000000000000002,4.0999999999999996,3.1000000000000001],[1.2,3.5,2.7999999999999998,4.5 6.4000000000000004],[1.2,1.3,1.3999999999999999,1.5,1.6000000000000001]]
这是常规的print
函数用来打印这样的数组。
首先,您需要连接或组合您所拥有的数组。你可以简单地通过创建另一个数组来完成,就像这样;
let fullArray = array1 + array2 + array3
接下来,你可以打印完整的阵列,
print(fullArray)
这将使你喜欢
[2.6000000000000001, 6.7000000000000002, 7.2000000000000002, 4.0999999999999996, 3.1000000000000001, 1.2, 3.5, 2.7999999999999998, 4.5, 6.4000000000000004]
的东西,也可以创建使用.joinWithSeparator这个数组的字符串表示(String:String)方法,像这样
let stringRepresentation = fullArray.joinWithSeparator(",")
print(stringRepresentation)
希望这有助于!
如果你想它去掉括号:
let string = nestedArray.flatMap { (array) in
array.flatMap { String($0) }.joinWithSeparator(",")
}.joinWithSeparator(",")
输出:
"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"
记住,使用,
作为分隔符不是本地化的证明,并在法国的语言环境会导致像“2,6,6,7,7,2”等字符串。
您能告诉我们预期的产量吗? –
是的,我也很困惑。我需要创建一个函数,它以一个双精度数组数组作为参数并返回一个字符串对象。然后遍历每个内部数组,并将内部数组的每个元素连接成一个String对象。但我不知道如何去做。 – art3mis
好的谢谢:) – art3mis