相交超过 2 个数组集?
Intersecting more than 2 Array Sets?
我发现 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
最终答案结合了以下菲利普的答案和我在此处发布的代码。这回答了 "What if you don't know how many arrays there will be?"
的问题
诀窍是设置和初始化一个临时集合,以便在循环的下一轮中相交。我必须初始化它,否则它不会让我使用它。
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)
在 playground 中试试这个并检查 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)")
我发现 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
最终答案结合了以下菲利普的答案和我在此处发布的代码。这回答了 "What if you don't know how many arrays there will be?"
的问题诀窍是设置和初始化一个临时集合,以便在循环的下一轮中相交。我必须初始化它,否则它不会让我使用它。
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)
在 playground 中试试这个并检查 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)")