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

3

我有一个双重数组,里面包含多个双精度浮点数。如何将其转换为单个字符串并在控制台上打印出来?

我需要创建一个函数,该函数以数组的方式作为参数,并返回一个字符串对象。然后循环遍历每个内部数组,并将每个内部数组的元素连接成一个字符串对象。但我不确定应该如何操作。

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))

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

1
请问您能展示一下期望的输出结果吗? - Luca Angeletti
是的,我也感到困惑。我需要创建一个函数,它以一个双重数组作为参数,并返回一个字符串对象。然后循环遍历每个内部数组,并将每个内部数组的元素连接成一个字符串对象。但我不确定如何去做。 - Nyx
在上面的例子中,您期望的输出是什么? - Code Different
4个回答

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”等。

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函数用来打印这样的数组所使用的方式。


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)

希望这能有所帮助!

0

从您问题的描述来看,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)
    // 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初始化程序(在上述第一种和第二种方法中分别为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值将四舍五入到提供的小数位数。

@VeronicaG 很高兴能帮忙! - dfrib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接