2017-08-28 63 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