需要创建一组快速集合

时间:2018-10-05 19:31:59

标签: arrays swift swift3 set swift3.2

我是Swift的新手,距离我已经做过任何编程已经有一段时间了,请原谅我。我需要一些有关如何创建一个包含一组数字的空数组的帮助。

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

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

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]))
}

1 个答案:

答案 0 :(得分:1)

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

要使Array中的Set为空,您必须明确声明所需的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).")
}