Home > database >  Swift: How to check intersection with multiple sets?
Swift: How to check intersection with multiple sets?

Time:10-27

I have a master set generated by 5 random numbers from 1 to 52; I would like to compare this master set with 13 other sets, each containing 4 numbers between 1 and 52. Is there a way to check if there are any 2 sets, each containing 2 numbers from the master set?

import UIKit

var firstCard = 0
var secondCard = 0
var thirdCard = 0
var fourthCard = 0
var fifthCard = 0

func generateRandomNumber(_ from:Int, _ to:Int, _ qut:Int?) -> [Int]
{
   var myRandomNumbers = [Int]()
   var numberOfNumbers = qut

let lower = UInt32(from)
let higher = UInt32(to 1)
    
    if numberOfNumbers == nil || numberOfNumbers! > (to-from)   1
    {
        numberOfNumbers = (to-from)   1
    }
    
    while myRandomNumbers.count != numberOfNumbers
    {
        let myNumber = arc4random_uniform(higher - lower)   lower
        
        if !myRandomNumbers.contains(Int(myNumber))
        {
            myRandomNumbers.append(Int(myNumber))
        }
    }
    
    return myRandomNumbers

}

let myArray = generateRandomNumber(1, 53, 5)

firstCard = myArray[0]
secondCard = myArray[1]
thirdCard = myArray[2]
fourthCard = myArray[3]
fifthCard = myArray[4]


let mainSetA = Set([firstCard, secondCard, thirdCard, fourthCard, fifthCard])

let setB: Set = [1, 2, 3, 4]
let setC: Set = [5, 6, 7, 8]
let setD: Set = [9, 10, 11, 12]
let setE: Set = [13, 14, 15, 16]
let setF: Set = [17, 18, 19, 20]
let setG: Set = [21, 22, 23, 24]
let setH: Set = [25, 26, 27, 28]
let setI: Set = [29, 30, 31, 32]
let setJ: Set = [33, 34, 35, 36]
let setK: Set = [37, 38, 39, 40]
let setL: Set = [41, 42, 43, 44]
let setM: Set = [45, 46, 47, 48]
let setN: Set = [49, 50, 51, 52]

no clue what to do next...

CodePudding user response:

Something like this might help:

let mainSet = Set([1, 2, 3, 4])

Here I have three sets out of four that contain at least two items in the main set:

let inputs: [Set<Int>] = [
    Set([9, 8, 7, 1]),
    Set([9, 8, 1, 2]),
    Set([9, 1, 2, 3]),
    Set([9, 0, 3, 4])
]

Filter the input sets array, to find any where the intersection between that set and the main set is at least 2:

let matchingSets = inputs.filter {
    $0.intersection(mainSet).count >= 2
}
  • Related