【问题标题】:How to check if element of an array is in another array?如何检查数组的元素是否在另一个数组中?
【发布时间】:2015-06-09 07:41:41
【问题描述】:

我有两个Array 持有MYItems 类的实例。 FavoriteItems 保存数组 Items 中最喜欢的项目

var Items :[MYItems] = []
var favoriteItems = [MYItems]()

现在我想检查 Items 数组是否包含 .我怎样才能做到这一点?我尝试使用下面的 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 块?为什么当我确定包含数组中的一项时会发生这种情况。

【问题讨论】:

  • Althug duplicate 是关于数组中的元素,答案仍然适用并且问题相似
  • 虽然是一样的......但这并不能解决我的问题......所以我问是否还有其他事情要知道
  • 你能解释一下为什么它不能“帮助你”吗?您需要索引吗?
  • 如果我知道..我为什么要在这里发布问题...

标签: ios arrays swift filter


【解决方案1】:

我怀疑你在错误的地方寻找问题。 您编写的关于如何通过数组进行搜索的代码确实是正确的。

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")
}

【讨论】:

  • 我知道这行得通,但为什么当我有一个包含类实例的数组时它没有
  • 编辑帖子,让你的班级平等
  • 这是什么 func == (lhs:MyItem, rhs:MyItem) -> Bool{ return lhs.id == rhs.id }..它给了我错误
  • 它使类符合平等协议
  • 我为什么要做equatable?
【解决方案2】:

将数组转换为Set,然后使用isSubsetOf

let itemsSet = Set(Items)
let favoritesSet = Set(favoriteItems)
let result = favoritesSet.isSubsetOf(itemsSet)

【讨论】:

  • 它在最后一行崩溃
【解决方案3】:
NSMutableSet *intersection = [NSMutableSet setWithArray:aArray];
[intersection intersectSet:[NSSet setWithArray:bArray]];
NSArray *intrsecArray = [intersection allObjects];

bArray 中不存在于 aArray 中的对象子集:

NSMutableArray *cArray = [NSMutableArray arrayWithArray:bArray];
[cArray removeObjectsInArray:aArray];

希望这会有所帮助.. :)

【讨论】:

  • 这个答案如果使用与问题相同的语言会更好。
【解决方案4】:

很简单,使用下面NSArray的方法

id commonObject = [array1 firstObjectCommonWithArray:array2];

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

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 2017-03-03
    • 2010-10-06
    • 1970-01-01
    • 2020-06-13
    • 2017-02-10
    相关资源
    最近更新 更多