【问题标题】:How to create unique arrays of a given size from an array in Swift?如何从 Swift 中的数组创建给定大小的唯一数组?
【发布时间】:2014-09-09 16:44:44
【问题描述】:

给定一个 Ints 数组和所需的数组大小,myFunction 应该返回一个包含所有可能唯一数组的数组。初始数组中的所有 Int 都应该是唯一的。如果一个数组的所有成员都不能在另一个数组中找到,则该数组被认为是唯一的。

func myFunction(array : [Int], arraySize : Int) -> [[Int]] {
    //... What to put here?
}

【问题讨论】:

  • 数组参数的作用是什么?
  • 它指定要形成的数组的元素计数
  • 那么arraySize 是干什么用的?
  • 数组的大小可能不同
  • @Carpsen90:换句话说,你想要给定 n 元素集的所有 k 元素子集?

标签: arrays swift


【解决方案1】:

如果我正确理解您的问题,那么您想创建所有 k 元素 具有 n 个元素的给定集合的子集。这可以通过递归来完成

  • 将第一个元素a[1] 与 剩余元素a[2] ... a[n],以及
  • 添加a[2] ... a[n] 的所有 (k) 元素子集。

Swift 代码(有点通用,因此它不仅可以用于整数):

func allSubsetsOf<T>(elements: [T], withCardinality k : UInt,
    combinedWith prefix : [T] = [], startingWithIndex j : Int = 0) -> [[T]] {

        if k == 0 {
            return [prefix]
        }

        if j < elements.count  {
            let first = elements[j]
            return allSubsetsOf(elements, withCardinality: k-1, combinedWith: prefix + [first], startingWithIndex : j+1)
                + allSubsetsOf(elements, withCardinality: k, combinedWith: prefix, startingWithIndex: j+1)
        } else {
            return []
        }
}

例子:

let result1 = allSubsetsOf([1, 2, 3, 4, 5], withCardinality: 3)
println(result1)
// [[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]]

let result2 = allSubsetsOf(["a", "b", "c", "d"], withCardinality: 2)
println(result2)
// [[a, b], [a, c], [a, d], [b, c], [b, d], [c, d]]

【讨论】:

    猜你喜欢
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多