如何将一个数组的双精度数组转换为字符串,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)) 

预期的输出应该是字符串对象,不带括号

+1

您能告诉我们预期的产量吗? –

+0

是的,我也很困惑。我需要创建一个函数,它以一个双精度数组数组作为参数并返回一个字符串对象。然后遍历每个内部数组,并将内部数组的每个元素连接成一个String对象。但我不知道如何去做。 – art3mis

+0

好的谢谢:) – art3mis

从你的问题看来,如果的nestedFunction(...)的参数应该是一个阵列具有双值元素[[Double]]),而不是一个阵列具有双值元素[Double])阵列的描述。

你可以利用.flatten()来简单的嵌套数组nestedArraynestedFunction(...),然后例如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值将四舍五入为提供的小数位数。

+0

它的工作原理...谢谢:) – art3mis

+0

@VeronicaG高兴地帮助! – dfri

阵列符合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”等字符串。