如何定义集合的集合<;Int>;(以前如何在swift中将集合作为函数参数传递?)

如何定义集合的集合<;Int>;(以前如何在swift中将集合作为函数参数传递?),swift,function,parameters,set,Swift,Function,Parameters,Set,我想将Set作为参数传递给函数。当我这样做时: let setsOfWinningCells: Set = [ [0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6] ] func isWinner(playerCells: Set<Int>) { for winningCells in setsOfWinningCells { if playerCells.isSuper

我想将
Set
作为参数传递给函数。当我这样做时:

let setsOfWinningCells: Set = [ [0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6] ]

func isWinner(playerCells: Set<Int>) {
    for winningCells in setsOfWinningCells {
        if playerCells.isSupersetOf(winningCells) {
            // do something    
        }
    }
}
let setsOfWinningCells:Set=[[0,1,2]、[3,4,5]、[6,7,8]、[0,3,6]、[1,4,7]、[2,5,8]、[0,4,8]、[2,4,6]]
func isWinner(玩家cells:Set){
用于WinningCell集合中的WinningCell{
如果playerCells.isSupersetOf(winningCells){
//做点什么
}
}
}
编译器抱怨它
无法使用类型为“(NSArray)”的参数列表调用“issupertof”
。使用
Set()
代替
Set
也不起作用

有人知道正确的语法吗?谢谢

澄清


我错误地认为问题在于正确地将集合传递给函数,但事实上问题在于没有正确地定义集合集合。很抱歉造成混淆。

winningCells是NSArray,您应该为IssupersTof(_)函数传递一个集合

winningCells是NSArray,您应该为IssupersTof(_)函数传递一个集合

让我们尝试更好地定义您的问题

组结构 让我们定义一个结构来表示一组
Int(s)
的概念。我们还希望结构是可散列的

struct Group: Hashable {
    let values: Set<Int>
    var hashValue: Int { return values.hashValue }
}

func ==(left:Group, right:Group) -> Bool {
    return left.values == right.values
}
如您所知,组内
Int
的顺序与无关

例如,玩家有
[4,3,5]
,获胜的小组是
[3,4,5]
。即使值的顺序不同,组仍会添加到结果中

查找玩家获胜组(超集)

让我们考虑一下这个游戏组

let playerGroups: Set<Group> = [
    Group(values:[4,0,8]),
    Group(values:[2,4,6])
]
let playerGroups: Set<Group> = [
    Group(values:[4,0,8]),
    Group(values:[2,4,6]),
    Group(values:[6,7,8,9]),
]

让我们试着更好地定义您的问题

组结构 让我们定义一个结构来表示一组
Int(s)
的概念。我们还希望结构是可散列的

struct Group: Hashable {
    let values: Set<Int>
    var hashValue: Int { return values.hashValue }
}

func ==(left:Group, right:Group) -> Bool {
    return left.values == right.values
}
如您所知,组内
Int
的顺序与无关

例如,玩家有
[4,3,5]
,获胜的小组是
[3,4,5]
。即使值的顺序不同,组仍会添加到结果中

查找玩家获胜组(超集)

让我们考虑一下这个游戏组

let playerGroups: Set<Group> = [
    Group(values:[4,0,8]),
    Group(values:[2,4,6])
]
let playerGroups: Set<Group> = [
    Group(values:[4,0,8]),
    Group(values:[2,4,6]),
    Group(values:[6,7,8,9]),
]

谢谢你,哈米什,你指出了我错过的东西。我的问题不是错误地传递集合,而是我的
Set
Set
没有正确定义。我最初的定义是,它是
数组的
集合
。应该是:

let setsOfWinningCells: Set<Set<Int>> = [ [0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6] ]
let setsOfWinningCells:Set=[[0,1,2]、[3,4,5]、[6,7,8]、[0,3,6]、[1,4,7]、[2,5,8]、[0,4,8]、[2,4,6]]

谢谢你,哈米什,你指出了我错过的东西。我的问题不是错误地传递集合,而是我的
Set
Set
没有正确定义。我最初的定义是,它是
数组的
集合
。应该是:

let setsOfWinningCells: Set<Set<Int>> = [ [0,1,2], [3,4,5], [6,7,8], [0,3,6], [1,4,7], [2,5,8], [0,4,8], [2,4,6] ]
let setsOfWinningCells:Set=[[0,1,2]、[3,4,5]、[6,7,8]、[0,3,6]、[1,4,7]、[2,5,8]、[0,4,8]、[2,4,6]]

SetsofWinning Cells的定义是什么?嗨,哈米什,这是一组集合。我现在明白你的意思了谢谢,哈米什。这就是我需要的:让setsOfWinningCells:Set=[[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]没问题,我正要把它作为一个答案发布;)请随意删除您的问题,或者如果您认为您的解决方案可能对其他人有用,请将其作为答案发布。WenningCells的定义是什么?嗨,Hamish,这是一组。我现在明白你的意思了谢谢,哈米什。这就是我需要的:让setsOfWinningCells:Set=[[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]没问题,我正要把它作为一个答案发布;)请随时删除您的问题,如果您认为您的解决方案可能对其他人有用,请将其作为答案发布。请您通过提供替换或示例代码详细说明您的答案。如果您不确定要做什么,请随时查看。:)请提供替换代码或示例代码,详细说明您的答案。如果您不确定要做什么,请随时查看。:)