如何将一个双精度数组的数组转换为字符串,Swift

时间:2016-06-28 20:06:39

标签: arrays xcode 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]

这是我的代码......但是我不知道如何做一个for循环来给我答案......

func nestedFunction(nestedArray: [[Double]]) -> String {
    var stringVar: String = ""

    ( for loop here... )

    return stringVar
}

print(nestedArrayFunction(nestedArray))

预期输出应该是一个字符串对象,没有括号

4 个答案:

答案 0 :(得分:1)

如果你想要它没有括号:

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”的字符串等等。

答案 1 :(得分:0)

数组符合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函数用于打印此类数组的内容。

答案 2 :(得分:0)

首先,您需要连接或组合您拥有的数组。你可以通过创建另一个数组来做到这一点,就像这样;

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)

希望这有帮助!

答案 3 :(得分:0)

从您问题中的描述看来,似乎nestedFunction(...)的参数应该是具有双值元素的数组[[Double]])而不是带有双值元素的数组[Double])。

您可以.flatten()使用nestedArraynestedFunction(...)中的简单嵌套数组reduceDouble将展平数组的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

请注意,由于浮点精度有限,使用直接时,某些双值可能最终会出现“杂乱”2.6表示(例如2.6000000000000001可能最终为String)上面的String($1)初始值设定项(String(elem)String,分别在第一种和第二种方法中)。要兑换此内容,您可以使用以下Double初始化程序为String值的String(format: "%.3f", myDoubleValue) /* \ number of fraction digits (3 here) */ 表示设置固定数量的小数位数:

String($1)

例如,分别用String(elem)String(format: "%.3f", $1)替换上述方法中的String(format: "%.3f", elem)Double,以获得您选择的一些小数位数。 resources :advertisers do resources :experiments end 值将四舍五入为提供的小数位数。

相关问题