Xcode 9.4.1 Swift 4-将非基元集与包含Int的基元集进行比较

Xcode 9.4.1 Swift 4-将非基元集与包含Int的基元集进行比较,swift,set,Swift,Set,在返回true之前,我无法确定如何检查列表组的每个列表中是否存在一个值,如果4个列表中的一个缺少一个值,则func必须返回false,因此我无法理解如何处理这种情况 粘贴的列表将具有包含id、名称和组的数据结构 对象列表中传递的对象示例: 对象-id:Int,名称:String,组:String init(){ //contains value which will match objList id's let list1 : Set<Int> = [1,2]

在返回true之前,我无法确定如何检查列表组的每个列表中是否存在一个值,如果4个列表中的一个缺少一个值,则func必须返回false,因此我无法理解如何处理这种情况

粘贴的列表将具有包含id、名称和组的数据结构 对象列表中传递的对象示例: 对象-id:Int,名称:String,组:String

init(){ 
    //contains value which will match objList id's
    let list1 : Set<Int> = [1,2] 
    let list2 : Set<Int> = [3,4] 
    let list3 : Set<Int> = [5,6,7] 
    let list4 : Set<Int> = [8,9]

    //Set of Sets
    listGroups = [list1,list2,list3,list4] 
}

func checklist(_ objList: [Details]) -> Bool { 
    //I want to check that each sub set(list1-list4) elements exist 
    //E.G. if objList contains 2, 3, 7, 8, 15, 21 it will return true 
    //and if objList contains 1, 4, 7, return false as it doesn't contain a  
    //number from each set 

    //How I thought to approach but became stuck
    for obj in objList {
        for set in listGroups {
            if set.contains(i.id){
                //return true if objList contains numbers from list1, list2, list3 and list4
            }
        }
    }
    //I require an id from each list to be present in the objList
    //but how would i know which set had which id and count how many group of 4 
    //there would be
}
init(){
//包含与对象列表id匹配的值
让列表1:Set=[1,2]
让列表2:Set=[3,4]
让列表3:Set=[5,6,7]
让列表4:Set=[8,9]
//一套
listGroups=[list1、list2、list3、list4]
}
func检查表(ujlist:[详细信息])->Bool{
//我想检查每个子集(list1-list4)元素是否存在
//例如,如果objList包含2、3、7、8、15、21,则返回true
//如果objList包含1、4、7,则返回false,因为它不包含
//每套的数字
//我本想接近,但却被卡住了
对象列表中的对象{
对于列表组中的集合{
如果设置包含(i.id){
//如果objList包含列表1、列表2、列表3和列表4中的数字,则返回true
}
}
}
//我需要每个列表中的id出现在objList中
//但我怎么知道哪一组有哪一个id,并计算有多少组有4个id
//会有
}
传递的“Details”包含关于它们的详细信息,但是我要做的是检查列表组中的Int是否存在于传递的objList中。但是,func只能在ListGroup的每个子集合中都存在一个值时返回true


所有4个子集中的一个值必须存在,然后我才能返回true,如果一个或多个值缺失,func必须返回false

itemList
id
值创建一个
,并使用
交集
检查一个集是否至少包含另一个集的一项

func checklist(_ objList: [Details]) -> Bool {
    let idSet = Set(objList.map{$0.id})

    for set in listGroups {
        if set.intersection(idSet).isEmpty { return false }
    }
    return true
}
对于很长的列表,从
idSet

func checklist(_ objList: [Details]) -> Bool {
   var idSet = Set(objList.map{$0.id})

    for set in listGroups {
        let commonSet = set.intersection(idSet)
        if commonSet.isEmpty { return false }
        idSet.subtract(set)
    }
    return true
}

itemList
id
值创建一个
Set
,并使用
intersection
检查一个集合是否至少包含另一个集合的一个项目

func checklist(_ objList: [Details]) -> Bool {
    let idSet = Set(objList.map{$0.id})

    for set in listGroups {
        if set.intersection(idSet).isEmpty { return false }
    }
    return true
}
对于很长的列表,从
idSet

func checklist(_ objList: [Details]) -> Bool {
   var idSet = Set(objList.map{$0.id})

    for set in listGroups {
        let commonSet = set.intersection(idSet)
        if commonSet.isEmpty { return false }
        idSet.subtract(set)
    }
    return true
}

区别在于传递的itemList不是2D,而是包含id、名称和价格。但是,我需要一种方法来对照集合集检查itemList中每个项的id,而不是在2D数组中使用简单的.contains。我知道这在本质上是相似的,但事实上我需要一个4个id,在列表1、列表2、列表3和列表4中。然后编辑问题并提供真实数据。原语
Int
和更复杂的对象之间的区别至关重要。并描述对象的精确匹配条件。我更新了我的问题,希望它更清楚我想做什么。我写了一个答案。区别在于传递的itemList不是2D,而是包含id、名称和价格。但是,我需要一种方法来对照集合集检查itemList中每个项的id,而不是在2D数组中使用简单的.contains。我知道这在本质上是相似的,但事实上我需要一个4个id,在列表1、列表2、列表3和列表4中。然后编辑问题并提供真实数据。原语
Int
和更复杂的对象之间的区别至关重要。我已经更新了我的问题,我希望它更清楚我想做什么,我写了一个答案。