[英]How do I combine two arrays into one in Swift?
我有兩個數組:
var array1: [String] = ["l1", "m2", "r3"]
var array2: [String] = ["l4", "m5", "r6"]
我如何將它們組合成一個看起來像的數組
var combinations: [[String]] = [
["l1", "m2", "r3"], ["l1", "m5", "r3"], ["l1", "m5", "r6"], ["l1", "m2", "r6"],
["l4", "m2", "r3"], ["l4", "m5", "r3"], ["l4", "m5", "r6"], ["l4", "m2", "r6"]
]
編輯1 :如果您有兩個以上的數組
let arrays: [[String]] = [array1, array2, moreArrays]
var combinations: [[String]] = []
let arraysLen: Int = arrays.count
let arrLen: Int = arrays[0].count
let numCombinations: Int = Int(pow(Double(arraysLen), Double(arrLen)))
for i in (0 ..< numCombinations) {
var combination: [String] = []
for j in (0 ..< arrLen) {
let arrIndex: Int = i / Int(pow(Double(arraysLen), Double(j))) % arraysLen
let elIndex: Int = arrLen - j - 1
combination.insert(arrays[arrIndex][elIndex], at: 0)
}
combinations.append(combination)
}
如果要獲得兩個數組的可能組合,可以使用一個簡單的技巧:
var array1: [String] = ["l1", "m2", "r3"]
var array2: [String] = ["l4", "m5", "r6"]
guard array1.count == array2.count else {
fatalError("Array must be of the same lenght")
}
let numCombinations = 1 << array1.count
let combinations: [[String]] = (0..<numCombinations).map { (index: Int) in
return Array((0..<array1.count).map { (elementIndex: Int) in
// every bit decides which array to choose
let chooseArray1 = (index & (1 << elementIndex)) == 0
return chooseArray1 ? array1[elementIndex] : array2[elementIndex]
})
}
print(combinations) // [["l1", "m2", "r3"], ["l4", "m2", "r3"], ["l1", "m5", "r3"], ["l4", "m5", "r3"], ["l1", "m2", "r6"], ["l4", "m2", "r6"], ["l1", "m5", "r6"], ["l4", "m5", "r6"]]
如果兩個數組計數相同,則在每次迭代中都從原始數組迭代兩個數組並交換對象,並將其追加到結果中。
var combinations: [[String]] = []
if array1.count == array2.count {
combinations.append(array1)
combinations.append(array2)
for i in 0..<array1.count {
var arr1 = array1
var arr2 = array2
(arr1[i], arr2[i]) = (arr2[i], arr1[i])
combinations.append(arr1)
combinations.append(arr2)
}
print(combinations)
}
[[“ l1”,“ m2”,“ r3”],[“ l4”,“ m5”,“ r6”],[“ l4”,“ m2”,“ r3”],[“ l1”,“ m5 “,” r6“],
[“ l1”,“ m5”,“ r3”],[“ l4”,“ m2”,“ r6”],[“ l1”,“ m2”,“ r6”],[“ l4”,“ m5” ,“ r3”]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.