arrays - 具有可变内容类型和长度的元组数组?

标签 arrays swift multidimensional-array

在为正确输出数据而开发一些调试功能时,我遇到了元组数组的问题。显然我不能声明包含灵活数据类型和大小的元组数组。

我想支持各种类型的元组数组,比如 [(String, Int, Int, String)][(Int, Int, Bool)] ,不只是一个。

这是我目前的尝试,但我无法声明元组数组

(第二个for循环的计数器似乎也不正确?)

func debugData(names: [String], data: [(*magic tupel*)] ) {
    var debugLine = ""
    for line in 0..<data.count {
        for i in 0..<(data[line].count) {
            debugLine += "\(names[i])=\(data[line].i) "
        }
        print(debugLine)
        debugLine = ""
    }
}

我正在尝试像这样将两个数组放在一起: ["Name", "Age", "SexM"][("Alex", 5, true), ("Lisa", 7, false), ("Max", 9, true)] .所需的输出(对于第一个元素)类似于 "Name=Alex, Age=5, SexM=true"这将是两个数组的组合。

因为我可以简单地选择 Array<(String, Int, Bool)>在函数的声明中,至少在上面的示例中,但我希望此函数适用于所有类型的数据 - 具有各种数组大小和灵活的数据类型...

我想它并没有那么复杂,我只是 Swift 的新手。

最佳答案

元组是不合适的,因为您不能以通用方式声明元组。

一个可能的解决方案是将 data 声明为 CustomStringConvertible 的数组而不是元组。

好处是您可以传递任何支持字符串插值的类型,并且数组中的项数是可变的。

func debugData(names: [String], data: [[CustomStringConvertible]] ) {
    var debugLine = ""
    for line in data {
        for i in 0..<line.count {
            debugLine += "\(names[i])=\(line[i]) "
        }
        print(debugLine)
        debugLine = ""
    }
}

debugData(names: ["Name", "Age", "SexM"], data: [["Alex", 5, true], ["Lisa", 7, false], ["Max", 9, true]])

关于arrays - 具有可变内容类型和长度的元组数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57348459/

相关文章:

ios - 异步获取 Swift Xcode

Java:将数组元素映射到一组属性

javascript - 无法访问数组

c++ - 有没有办法改变任何索引处的 char* 值?

javascript - 使用 jQuery 将多个 CSS 类组成的 Javascript 数组分配给一个元素

java - 访问堆栈顶部元素以递归比较两个堆栈元素是否相同的方法

swift - 合并 SKShapeNode 和 SKLabelNode

string - 如何在 Swift 中将 NSString 转换为字符?

php - 将关联数组转换为普通数组

arrays - Scheme 语言中的 3D 数组