Фильтровать массив объектов Core Data другим массивом объектов с соответствующим свойством

#arrays #swift #sorting #core-data

#массивы #swift #сортировка #core-data

Вопрос:

У меня есть класс объектов Core Data для изображений:

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

У меня есть два разных массива, которые будут содержать эти объекты:

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

Что я хочу сделать, так это написать функцию, которая будет отфильтровывать любые объекты изображения в контейнере1, где RecordID совпадает с RecordID любого объекта в контейнере2.

Что — то вроде:

 func returnIntersectionByRecordID() -> [Image] {

  var intersection = [Image]()

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

Однако вместо этого я хотел бы сделать это с помощью фильтра.

Ответ №1:

Я делаю два шага. Сначала получите идентификаторы второго массива (container2) с помощью map

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

Затем выполните фильтрацию

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

Комментарии:

1. Спасибо! Отлично работает!

2. Мне очень помогло!