相交超过2个数组?

时间:2015-12-10 19:55:16

标签: arrays swift2.1

我发现this question answered here关于两个数组的交集。如果我想找出两个以上项目之间的共同点,该怎么办?如果我不知道会有多少阵列怎么办?

更新:

这是我的代码,并试图与许多未知数组相交,但在此方案中我只能得到两个数组,然后我不得不担心索引超出范围问题并在下一个循环中丢失集合。我考虑过将它们存储在临时变量中,但是我不确定这是不是最好的方法。

    //anyArray is an array of string arrays containing
    //the items I want to intersect

    let count = anyArray.count - 1
    //var temp: Array<String>

    for index in 0...count {
        let item1 = anyArray[index] as! Array<String>
        if index < count {
            let item2 = anyArray[index + 1] as! Array<String>
            let set1 = Set(item1)
            let set2 = Set(item2)
            let inter = set1.intersect(set2)
            print(inter)
        }
    }

更新2

最后的答案是Phillip的答案和我在这里发布的代码的组合。这回答了“如果你不知道会有多少阵列怎么办?”的问题。

诀窍是设置并初始化一个临时Set,以便在循环中的下一轮中交叉。我不得不初始化它,否则它不会让我使用它。

let count = anyArray.count - 1
var inter = Set<String>()

for index in 0...count {
   if index == 0 {
       let item1 = anyArray[index] as! Array<String>
       let item2 = anyArray[index + 1] as! Array<String>
       let set1 = Set(item1)
       let set2 = Set(item2)
       inter = set1.intersect(set2)

   } else {
       if index < count {
           let item = anyArray[index + 1] as! Array<String>
           inter = inter.intersect(item)
       }
   }
}

print(inter)

1 个答案:

答案 0 :(得分:1)

在游乐场中尝试此操作并检查inter的数据类型:

let a1: Array = [1, 1, 2, 3, 5, 8]
let a2: Array = [1, 2, 3, 4, 5]
let a3: Array = [1, 2, 4, 8, 16]

let anyArray = [a1, a2, a3]

var inter = Set(anyArray[0])

for idx in 1 ..< anyArray.count {
    inter = inter.intersect(anyArray[idx])
}

print("\(inter)")