denvdancsk
denvdancsk

Reputation: 3053

Filter array of Core Data objects with another array of objects with matching property

I have a Core Data object class for images:

@objc class Image: NSManagedObject {
  @NSManaged var imageData: NSData?
  @NSManaged var recordID: NSNumber?
  @NSManaged var updatedAt: NSDate?  
}

I have two different arrays which will contain these objects:

var container0 = [Image]()
var container1 = [Image]()

What I want to do is write a function that will filter out any Image objects in container1 where the recordID matches the recordID of any object in container2.

Something like:

func returnIntersectionByRecordID() -> [Image] {

  var intersection = [Image]()

  for object0 in container0 {
    for object1 in container1 {
      if object0.recordID == object1.recordID {
        intersection.append(object0)
      }
    }
  }
  return intersection
}

However, I'd like to do this with a filter instead.

Upvotes: 0

Views: 999

Answers (1)

xmhafiz
xmhafiz

Reputation: 3538

I come into two steps. First, get the ids of second array (container2) using map

// the will produce array if ids
let ids = container2.map({ return $0.recordId }) 

Then, do filtering

let result = container.filter({ ids.contains($0.recordId) })

Upvotes: 2

Related Questions