【问题标题】:separate 2D array into 2 different arrays in swift快速将二维数组分成2个不同的数组
【发布时间】:2021-02-09 12:06:47
【问题描述】:

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

当我打印出区间数组时,它是一个二维数组,如下所示:

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.0, 55.0, 73.0]

我查看了平面图,但这只会导致将 2D 数组删除为 1 个表单的单个数组

[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]
  

谢谢

【问题讨论】:

    标签: arrays swift multidimensional-array


    【解决方案1】:

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

    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).Interval(时间: 0.0,瓦特:50.0),.....]
    • 对于附加组件,我使用数组来做两件事 1) 绘制一个折线图,其中 x = 时间,y = 瓦特 2) 使用它的时间部分来做倒计时,直到我应该切换到第二个数组序列
    • @myjunk 这看起来更像是您打印的方式/内容的问题
    • @myjunk 好的,但这有什么问题吗?
    • 谢谢!我喜欢 foreach 版本。干净多了。编辑:关于我想要实现的目标。假设缺乏经验/知识是问题所在。最初我以为我可以学习如何使用 2D 数组来做到这一点,但认为这更简单(对我而言)
    猜你喜欢
    • 2023-04-07
    • 2020-11-01
    • 2020-05-06
    • 1970-01-01
    • 2011-04-10
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多