【问题标题】:Need to create an array of sets swift需要快速创建一组集合
【发布时间】:2019-03-11 08:25:04
【问题描述】:

我是 Swift 的新手,我已经有一段时间没有进行任何编程了,所以请原谅我。我需要一些关于如何创建一个包含一组数字的空数组的帮助。

我要做的是从两个不同的数据文件中读取两组数字,并将它们放入两个不同的数据结构中 - 在本例中为数组。然后我想遍历数组并确定一组数字是否是另一组的子集。我在 swift playground 中创建了以下代码,并对其进行了测试,我知道它可以使用代码中的预定义值来完成。

但是,我似乎无法在网上找到任何地方如何创建一组集合。我发现各种链接说明何时使用数组而不是集合,反之亦然。当我尝试声明一个 Set 类型的空数组时,它给了我一个错误。我会很感激有人指出我正确的方向。这是我在 Playground 中输入的代码。

var a: Set = [1,2]
var b: Set = [1,3]
var c: Set = [1,4]

var aa: Set = [1,4,23,29,50]
var bb: Set = [1,3,45,47,65]
var cc: Set = [7,9,24,45,55]

let combiArray = [a, b, c]
let resultsArray = [aa, bb, cc]

for i in 0...2 {
print (resultsArray[i], 
       combiArray[i], 
       combiArray[i].isSubset(of: resultsArray[i]))
}

【问题讨论】:

  • “当我尝试声明一个 Set 类型的空数组 ...” – 请展示您的尝试 – ”... 它给了我一个错误” – 请引用确切的错误信息。
  • 你应该避免像fooArray那样调用变量。最好只说foos,或者其他提供有关数据的更多信息的内容。它是一个数组这一事实是它最明显的部分,它不需要写在名称中。
  • 你的意思是这个var setArray: [Set<Int>] = [] 不起作用?
  • 感谢您的反馈 - 我尝试了下面的示例,它成功了!非常感谢 - 再次感谢!

标签: arrays swift swift3 set swift3.2


【解决方案1】:

Set 是一个泛型类型。当你说var a: Set = [1, 2]时,编译器会为你推断出必要的泛型类型参数,使其等价于var a: Set<Int> = [1, 2]

要使Sets 中的Array 为空,您必须明确说明您想要哪种Set,因为编译器无法从Set 的内容中推断出它。你正在寻找一个空的Array<Set<Int>>,又名[Set<Int>]

要么:

let arrayOfSets: [Set<Int>] = []

或:

let arrayOfSets = [Set<Int>]() // preferred

这反映在您的示例中:

let combiArray: [Set<Int>] = [ // TODO: What the heck is a "combi"?
    [1, 2],
    [1, 3],
    [1, 4],
]
let results: [Set<Int>] = [
    [1, 4, 23, 29, 50],
    [1, 3, 45, 47, 65],
    [7, 9, 24, 45, 55],
]

for (combi, result) in zip(combiArray, results) {
    print("\(combi) \(combi.isSubset(of: result) ? "is" : "is not") a subset of \(result).")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-10
    • 2022-09-26
    • 2015-05-03
    • 2017-07-14
    • 1970-01-01
    • 2014-07-24
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多