【问题标题】:Swift array to array of tuplesSwift数组到元组数组
【发布时间】:2017-08-28 03:00:16
【问题描述】:

我有以下两个数组:

let xaxis = ["monday", "tuesday", "wednesday", "thursday", "friday"]
let yaxis = [1, 2, 3, 4, 5]

我想将它们合并成一个如下所示的数组:

[ ("monday", 1), ("tuesday", 2), ("wednesday", 3), ("thursday", 4), ("friday", 5)]

【问题讨论】:

  • 这不是你展示的字典,它是一个元组数组
  • 更新问题

标签: swift tuples


【解决方案1】:

使用zipmap

let xaxis = ["monday", "tuesday", "wednesday", "thursday", "friday"]
let yaxis = [1, 2, 3, 4, 5]

let tuples = zip(xaxis, yaxis).map { ($0, $1) }

【讨论】:

  • 这些方法是否比简单的for循环更快,请给点建议
  • 以上是我的建议。避免过早优化。始终使用最简洁、最具表现力的语法,不要担心优化,除非它可能产生重大影响。性能差异与 5 个项目无法区分。而且在进行发布构建时几乎不存在。说了这么多,我想知道你为什么要使用元组。或者你为什么使用字符串数组而不是Calendar.current.weekdaySymbols。在考虑用 for 循环替换 zip/map 之前,我会担心很多事情。
  • 我以这两个数组为例,但真正的应用程序不会在数组中包含月份或任何日历数据。我只是想要一个如何将两个数组(一个是 string 类型,一个是 int 类型)转换为元组数组的示例。
【解决方案2】:

试试这个:

let arrayMerged = zip(xaxis, yaxis).map { ($0, $1) }

或者这个:

let arrayMerged = Array(zip(xaxis, yaxis))

【讨论】:

  • 后一个答案是?我是哪个更快?
【解决方案3】:
let tuples = xaxis.enumerated().map { (index, value) in (value, yaxis[index]) }

假设yaxis 的计数始终与xaxis 匹配。

【讨论】:

  • 这也假设xaxis数组中的值是唯一的。
  • 如果在大型数组上使用,该代码看起来简洁明了,但具有时间复杂度。如果考虑时间复杂度,建议使用 3stud1ant3 的答案
【解决方案4】:

试试这个:

let xaxis = ["monday", "tuesday", "wednesday", "thursday", "friday"]

let yaxis = [1, 2, 3, 4, 5]

var newArr = [(String, Int)]()

for i in 0..<xaxis.count {
        newArr.append((xaxis[i], yaxis[i]))
}
print(newArr)

【讨论】:

  • 这没有使用yaxis 数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多