【问题标题】:Tuple-Array with variable content types & length?具有可变内容类型和长度的元组数组?
【发布时间】:2019-08-04 16:46:14
【问题描述】:

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

我想支持各种类型的元组数组,例如 [(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&lt;(String, Int, Bool)&gt;,但我希望这个函数适用于各种数据——具有各种数组大小和灵活的数据类型......

我想它甚至没有那么复杂,我只是对 Swift 很陌生。

【问题讨论】:

  • 你为什么不用字典呢?或者在这种特殊情况下,Person 结构。
  • 我已经有相当多的数据打包在元组数组中,我现在正试图输出这些数据。我仍然会考虑这些用于未来的代码:)
  • 我强烈建议您将它们重构为结构或对象(类的实例)。元组适用于非常短暂的数据,并且在许多方面都非常有限
  • 您是否也建议不要使用 vadian 建议的代码,使用 CustomStringConvertible-Arrays?或者他们应该没问题? :)
  • 它赢得了战斗而不是战争。

标签: arrays swift multidimensional-array


【解决方案1】:

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

一种可能的解决方案是将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]])

【讨论】:

    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2019-07-11
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多