我有两个Array
持有类MYItems
的实例。 FavoriteItems
保存数组Items
var Items :[MYItems] = []
var favoriteItems = [MYItems]()
现在我想检查Items数组中是否包含favoriteItems。我怎么能做到这一点?我尝试使用下面的Find方法
if let index = find(favoriteItems, Items[indexPath.row]){
println("found item")
}else{
println("doesnotcontains item")
}
我尝试使用以下但是也没有帮助..
if contains(favoriteItems, Items[indexPath.row]){
println("found item")
}else{
println("doesnot contain item")
}
但是它总是进入else块?当我在数组中包含其中一个项目时,为什么会发生这种情况。
答案 0 :(得分:3)
我怀疑你是在错误的地方寻找问题。 关于如何通过数组搜索的代码确实是正确的。
var Items :[Int] = [1,2,3,4,5,6,7,8,9,]
var favoriteItems:[Int] = [1,3,4,5,7]
if contains(Items, favoriteItems[3]){
println("found item")
}else{
println("doesnotcontains item")
}
在swift 1.2中工作。
favoriteItems
(5)的第四项确实在Items
内,并且还打印found item
要使用自定义类,您应该让您的班级Equatable
这样做,以使您的课程符合Equatable
协议。
func == (lhs:MyItem, rhs:MyItem) -> Bool{
return lhs.id == rhs.id
}
class MyItem :Equatable {
let id:Int
init(id:Int){
self.id = id
}
}
var Items :[MyItem] = [MyItem(id: 1), MyItem(id:2), MyItem(id:4), MyItem(id:5)]
var favoriteItems:[MyItem] = [MyItem(id: 1), MyItem(id:2)]
if contains(Items, favoriteItems[1]){
println("found item")
}else{
println("doesnotcontains item")
}
答案 1 :(得分:2)
将数组转换为Set,然后使用isSubsetOf
:
let itemsSet = Set(Items)
let favoritesSet = Set(favoriteItems)
let result = favoritesSet.isSubsetOf(itemsSet)
答案 2 :(得分:0)
NSMutableSet *intersection = [NSMutableSet setWithArray:aArray];
[intersection intersectSet:[NSSet setWithArray:bArray]];
NSArray *intrsecArray = [intersection allObjects];
aArray中不存在的bArray中对象的子集:
NSMutableArray *cArray = [NSMutableArray arrayWithArray:bArray];
[cArray removeObjectsInArray:aArray];
希望这会有所帮助.. :)
答案 3 :(得分:0)
这很简单,请使用以下NSArray方法
id commonObject = [array1 firstObjectCommonWithArray:array2];