2017-08-28 59 views
0

我有以下两个数组:斯威夫特阵元组的阵

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

我想将它们合并到一个数组,看起来像这样:

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

这不是一本字典,你都出现了,它的元组的数组 – 3stud1ant3

+0

更新的问题 – Martheli

回答

7

使用zipmap

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

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

与简单的循环相比,这些方法速度更快,请给出您的建议 – 3stud1ant3

+4

以上是我的建议。避免过早优化。始终使用最简洁,最具表现力的语法,不要担心优化,除非它可能会产生重大影响。性能差异与5个项目无法区分。而在发布版本时几乎不存在。所有这些都说过了,我想知道你为什么使用元组。或者你为什么使用一个字符串文本数组,而不是'Calendar.current.weekdaySymbols'。在花费第二次考虑用'for for循环替换'zip' /'map'之前,我会担心很多事情。 – Rob

+0

我用这两个数组作为例子,但真正的应用程序将不会有数月或任何日历数据在数组中。我只想要一个如何将两个数组(一个字符串和一个int类型)转换为一个元组数组的例子。 – Martheli

3

试试这个:

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) 
+1

这使得没有使用' yaxis'数组。 – rmaddy

+0

@rmaddy更新了答案,谢谢 – 3stud1ant3

1
let tuples = xaxis.enumerated().map { (index, value) in (value, yaxis[index]) } 

假设yaxis的共不总是匹配xaxis

+1

这也假设'xaxis'数组中的值是唯一的。 – rmaddy

+0

该代码看起来简短而干净,但具有时间复杂度,如果在大型阵列上使用。如果考虑时间复杂度,建议从3stud1ant3开始回答 – yarlg

+0

@rmaddy更新,谢谢! – sCha

1

试试这个:

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

或本:

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

@rmaddy编辑。提前错过了元组部分。 – nayem