当前位置: 首页 > 知识库问答 >
问题:

如何从Swift中的数组创建给定大小的唯一数组?

方安怡
2023-03-14

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

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

共有1个答案

丁翊歌
2023-03-14

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

  • 将第一个元素a[1]与剩余元素a[2]的所有(k-1)元素子集组合在一起。。。a[n],和

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]]
 类似资料:
  • 问题内容: 在Swift中,我试图创建一个由64个SKSpriteNode组成的数组。我想先将其初始化为空,然后将Sprites放在前16个单元格中,然后将最后16个单元格中(模拟象棋游戏)。 根据我在文档中了解的内容,我期望会出现以下情况: 要么 但这是行不通的。在第二种情况下,我收到一条错误消息:“尚不支持定长数组”。那可以是真的吗?对我来说,这听起来像是一项基本功能。我需要通过它们的索引直接

  • 问题内容: 我们如何用Swift语言(例如&在Objective-C中)创建唯一的对象列表。 问题答案: 从Swift 1.2(Xcode 6.3 beta)开始,Swift具有本机集合类型。从发行说明中: 包括一个新的数据结构,该结构提供具有完整值语义的独特元素的通用集合。它与之桥接,提供与和类似的功能。 以下是一些简单的用法示例: 但是还有更多可用的方法。 更新: 现在,集合也记录在Swift

  • 问题内容: 我真的对在Swift中创建数组的方式感到困惑。您能否告诉我,有多少种方法可以创建一个带有细节的空数组? 问题答案: 干得好: 上面的内容还适用于其他类型,而不仅仅是字符串。这只是一个例子。 为它增值 我想您最终将要为其添加一个值! 要么 通过插入添加 一旦有了一些值,就可以插入新值而不是附加值。例如,如果要在数组的开头插入新对象(而不是将它们附加到末尾): 或者,您可以使用变量使插入更

  • 问题内容: 我想创建一个包含唯一字符串的数组。我怎样才能做到这一点? 问题答案: 如果要收集唯一元素,则为Set数据类型。Go没有集合数据类型,但是您可以使用来充当集合。 对于“好的”集合,请使用具有值类型(带有值)的映射并利用零值。对于内存占用最小的集合,请使用具有值类型的映射,因为类型的值不占用内存;并使用逗号分隔的习惯用法来判断值是否在集合/映射中。 这是set的“不错”版本的样子。代替切片

  • 问题内容: 在目标c中,我可以创建一个类数组并在方法中使用它 但是,swift没有“类”功能。返回类的元类型会导致错误 最后一行导致“致命错误:数组元素无法桥接到Objective-C” 如何在Swift中创建类数组? 问题答案: 显然,此问题已在Beta 3中修复,因此不再需要解决方法 我发现了一个纯粹的Swift hack: 先前的答案 我无法在Swift中以任何方式获取实例。似乎无法直接从转

  • 问题内容: 出于测试目的,我必须生成一定大小的文件(以测试上传限制)。 在Linux上创建一定大小的文件的命令是什么? 问题答案: 测试文件的大小在哪里(以字节为单位)