// 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
}
2条答案
按热度按时间yh2wf1be1#
使用来自https://stackoverflow.com/a/20049365/1187415的想法,这可以在Swift中完成
最后一个函数可以更快地写成
示例:
(If你的输入不限于整数,你可以在上面的函数中用
Any
替换Int
。更新Swift 3并作为泛型函数,以便它可以与任何元素类型一起使用:
soat7uwm2#
我希望这是一个扩展,所以这里是Martin R的优秀答案的翻译,作为Collection的扩展和一些测试应该涵盖它: