在swift中将2D阵列分离成2个不同的阵列



我目前有一个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)! 
}

当我打印出间隔数组时,它是一个2D数组,看起来像:

Intervals:[[0.0, 50.0], [10.2, 55.0], [10.0, 73.0]]

虽然我可以通过矩阵访问各个值,例如:intervals[0][1]=50.0,但我认为将其分离为2个diff数组更容易。(数组集中的每个值都是[时间,百分比]。本质上,我希望实现以下结果:

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

我看过平面图,但这只会将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]
  

感谢

您可以将数据组合到一个结构中,并使用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])
}

最新更新