我发现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)
答案 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)")