如何检查数组的元素是否在另一个数组中?

时间:2015-06-09 07:41:42

标签: ios arrays swift filter

我有两个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块?当我在数组中包含其中一个项目时,为什么会发生这种情况。

4 个答案:

答案 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];

参考:https://developer.apple.com/documentation/foundation/nsarray/1408825-firstobjectcommonwitharray?language=objc