Используя идеи из https://stackoverflow.com/a/20049365/1187415, это может быть сделано в Swift, как
// Append all elements of a2 to each element of a1
func combihelper(a1 : [[Int]], a2 : [Int]) -> [[Int]] {
var result = [[Int]]()
for elem1 in a1 {
for elem2 in a2 {
result.append(elem1 + [elem2])
}
}
return result
}
func combinations(array : [[Int]]) -> [[Int]] {
// Start with the "empty combination" , then successively
// add combinations with each row of array:
var result : [[Int]] = [[]]
for row in array {
result = combihelper(result, row)
}
return result
}
последняя функция может быть записана более быстро, как
func combinations(array : [[Int]]) -> [[Int]] {
return reduce(array, [[]]) { combihelper($0, $1) }
}
Пример:
let myArray = [[1],
[2,3,4],
[5,6],
]
let result = combinations(myArray)
println(result)
// [[1, 2, 5], [1, 2, 6], [1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6]]
(Если ваш вклад не ограничивается целыми числами, вы можете заменить Int
на Any
в вышеуказанных функций.)
Обновление для Swift 3 и как обобщенная функция, так что может быть используется с любым типом элемента:
func combihelper<T>(a1 : [[T]], a2 : [T]) -> [[T]] {
var result = [[T]]()
for elem1 in a1 {
for elem2 in a2 {
result.append(elem1 + [elem2])
}
}
return result
}
func combinations<T>(of array: [[T]]) -> [[T]] {
return array.reduce([[]]) { combihelper(a1: $0, a2: $1) }
}
let myArray = [[1],
[2,3,4],
[5,6],
]
let result = combinations(of: myArray)
print(result) // [[1, 2, 5], [1, 2, 6], [1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6]]
Покажите нам код, который вы написали. – bdesham
Я не могу понять, как это сделать, но я использую некоторые циклы 'for in' – Carpsen90