Arrays 在swift中将二维阵列分成两个不同的阵列

Arrays 在swift中将二维阵列分成两个不同的阵列,arrays,swift,multidimensional-array,Arrays,Swift,Multidimensional Array,我目前有一个2D数组(来自JSON解码),声明为 struct workoutList : Codable { let intervals : [[Double]] } init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: CodingKeys.self) intervals = try values.decodeIfPresent([[Double]].self, forK

我目前有一个2D数组(来自JSON解码),声明为

struct workoutList : Codable {
  let intervals : [[Double]]
}

init(from decoder: Decoder) throws {
  let values = try decoder.container(keyedBy: CodingKeys.self)
  intervals = try values.decodeIfPresent([[Double]].self, forKey: .intervals)! 
}
打印Interval数组时,它是一个2D数组,看起来像:

Intervals:[[0.0, 50.0], [10.2, 55.0], [10.0, 73.0]]
虽然我可以通过矩阵访问各个值,例如:interval[0][1]=50.0,但我认为将其分为2个diff数组更容易。(数组集中的每个值都是[time,percentage]。基本上,我希望实现以下结果:

[时间]=[0.0,10.2,10.0] [百分比]=[50.0,55.0,73.0]

我看过flatmap,但这只会导致将2D数组删除为表单的单个数组

[0.0, 50.0, 10.2, 55.0, 10.0 73.0]
我试着用map来寻找例子,但不相信它有帮助

我终于做到了,但看起来很难看:

let flattenedArray = tabbar.workoutIntervals.flatMap {$0}
  print(flattenedArray) // [0.0, 50.0, 10.2, 55.0, 10.0, 73.0]
  
  var timeArray = [Double]()
  var wattArray = [Double]()
  
  for x in 0...flattenedArray.count - 1 {
    if x % 2 == 0{
      timeArray.append(flattenedArray[x] )
    } else {
      wattArray.append(flattenedArray[x] )
    }
  }
  
  print("time:\(timeArray)") // [ 0.0, 10.2, 10.0]
  print("watt:\(wattArray)") // [50.0, 55.0, 73.0]
  

多亏了而不是拆分成两个数组,您可以将数据合并到一个结构中,并使用
映射
转换数组

let intervals = [[0.0, 50.0], [10.2, 55.0], [10.0, 73.0]]

struct Interval {
    let time: Double
    let watt: Double
}

let workouts = intervals.map { Interval(time: $0[0], watt: $0[1])}
如果您仍然希望将它们放在两个数组中,我认为最简单的方法是使用
forEach

var times = [Double]()
var watts = [Double]()

intervals.forEach {
    times.append($0[0])
    watts.append($0[1])
}

您可以将数据组合到一个结构中,并使用
map
转换数组,而不是拆分为两个数组

let intervals = [[0.0, 50.0], [10.2, 55.0], [10.0, 73.0]]

struct Interval {
    let time: Double
    let watt: Double
}

let workouts = intervals.map { Interval(time: $0[0], watt: $0[1])}
如果您仍然希望将它们放在两个数组中,我认为最简单的方法是使用
forEach

var times = [Double]()
var watts = [Double]()

intervals.forEach {
    times.append($0[0])
    watts.append($0[1])
}

当我进行打印(训练)时,我会得到这些看起来很奇怪的
code
[MyProject.VCTrain.(未知上下文为$1034aea0c)。(未知上下文为$1034aea58)。间隔(时间:0.0,瓦特:50.0),…]此外,我正在使用数组做两件事1)绘制一个折线图,其中x=时间,y=瓦特2)使用它的时间部分进行倒计时,直到我应该切换到第二个阵列sequence@myjunk这看起来更像是关于你是怎样的人的问题printing@myjunk好的,但这是个什么问题?谢谢!我喜欢foreach版本。干净多了。编辑:考虑到我想要实现的目标。比如说,缺乏经验/知识是问题所在。起初我以为我可以学习如何使用2D阵列,但我觉得这更简单(对我来说),当我进行打印(训练)时,我会得到这些看起来奇怪的
code
[MyProject.VCTrain.(未知上下文在$1034aea0c)。(未知上下文在$1034aea58)。间隔(时间:0.0,瓦特:50.0),…]再加上,我用数组做了两件事1)画一个折线图,其中x=时间,y=瓦特2)用它的时间部分倒计时,直到我应该切换到第二个数组sequence@myjunk这看起来更像是关于你是怎样的人的问题printing@myjunk好的,但这是个什么问题?谢谢!我喜欢foreach版本。干净多了。编辑:考虑到我想要实现的目标。比如说,缺乏经验/知识是问题所在。起初我以为我可以学习如何使用2D阵列,但我觉得这更简单(对我来说)