2016-01-09 1 views
3

Je suis en train de fusionner deux tableau:Swift 2 - fusionner deux tableaux

tableau 1 [["aaa","111"],["bbb","222"],["ccc","333"]]

tableau 2 [["ddd","444"],["eee","555"],["fff","666"]]

Ce que je veux atteindre est d'avoir un seul tableau avec la valeurs respectant les positions de tableau telles que:

matrice fusionnée [["aaa","111"],["ddd","444"],["bbb","222"],["eee","555"],["ccc","333"],["fff","666"]]

Comment pourrais-je faire cela en utilisant Swift 2

Répondre

6
let arr1 = [["aaa","111"],["bbb","222"],["ccc","333"]] 
let arr2 = [["ddd","444"],["eee","555"],["fff","666"]] 
let arr3 = arr1 + arr2 
print(arr3) // [["aaa", "111"], ["bbb", "222"], ["ccc", "333"], ["ddd", "444"], ["eee", "555"], ["fff", "666"]] 

en vous cas, avec des exigences spécifiques

let arr4 = zip(arr1, arr2).reduce([]) { (var arr, p:(Array<String>, Array<String>)) -> [[String]] in 
    arr.append(p.0) 
    arr.append(p.1) 
    return arr 
} 
print(arr4) // [["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"], ["ccc", "333"], ["fff", "666"]] 

UPDATE selon vos besoins mentionnés dans les notes que vous pouvez ajouter le reste des valeurs de cette manière (s'il vous plaît changer laisser arr4 à var arr4 premier !!!)

var i = arr4.count/2 
while i < arr1.count { 
    arr4.append(arr1[i++]) 
} 

while i < arr2.count { 
    arr4.append(arr2[i++]) 
} 
print(arr4) 

cela vous donne

[["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"], ["ccc", "333"], ["fff", "666"], ["zzz", "755"]] 

il devrait fonctionner, même si l'un des tableaux est vide

+0

Merci, mais je dois obtenir un tableau comme: « [[ "aaa" "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"], ["ccc", "333"], ["fff" , "666"]] '- pas séquentielle – SNos

+0

@SNos je viens de ne pas fini .... voir le reste de ma réponse, s'il vous plaît – user3441734

+0

Merci beaucoup, ça marche très bon – SNos

3

utilisation zip fonction

Array(zip(arr1, arr2)) 

@EDIT

comme @ user3441734 mentionné zip renvoie Tupes. Pour résoudre ce problème, vous pouvez utiliser flatMap

var a = [["aaa","111"],["bbb","222"],["ccc","333"]] 
var b = [["ddd","444"],["eee","555"],["fff","666"]] 
var cos = Array(zip(a, b)) 
var eee = cos.flatMap { [$0.0, $0.1] } 

Résultat:

[["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"],["ccc", "333"], ["fff", "666"]] 

réponse courte:

var result = zip(arr1, arr2).flatMap { [$0.0, $0.1] } 
+0

un bon paquebot, mais vérifiez le résultat ... [(["Aaa", "111"], ["ddd", "444"]), (["bbb", "222"], ["eee" , "555"]), (["ccc", "333"], ["fff", "666"])] – user3441734

+0

oui vous avez raison. zip renvoie les tuples. –

+0

il a besoin d'un tableau ... voir ma réponse. – user3441734