ios - 快速排序具有许多关系的实体数组

标签 ios arrays swift sorting core-data

func fetchCD() -> [Entity] {

  var options : [Entity] = []
  let fetchRequest = NSFetchRequest(entityName:"EntityName")

  do {
    options = try cdh.managedObjectContext.executeFetchRequest(fetchRequest) as! [Entity]
  } catch let error as NSError {
    print("Fetch failed: \(error.localizedDescription)")
  } catch {

  }

  //here I'd like to order by Entity.types.counter (desc) 

  return options
}

//Entity+CoreDataProperties.swift
extension Entity {
    //my values
    @NSManaged var types: NSSet?
}


//Type+CoreDataProperties.swift

extension Type {

@NSManaged var counter: NSNumber

}

我如何通过 conter 对 [Entity] 数组进行排序,conter 是类型实体的属性(与实体有很多关系)?

最佳答案

简短的回答是你不能,因为它没有任何意义。您想要基于多个对象对单个对象进行排序。

现在,如果您想根据最高的 Type 或最大的 TypeEntityName 进行排序,那么这将是一个不同的问题并且是可解决的问题。

排序需要对“值(value)”问题有一致的答案。当检查许多 Type 对象时,EntityName 应按什么值排序?

应该基于Type对象的数量吗?这可以排序。

是否应该基于Type对象的存在?这也可以排序。

您还可以扭转这一局面并获取所有 Type 实体对象,根据 counter 对它们进行排序,然后检索 EntityName 对象排序完成后与 Type 实体关联。那么你的代码将如下所示:

func fetchCD() -> [Entity] {

  let fetchRequest = NSFetchRequest(entityName:"Type")
  fetchRequest.sortDescriptors = [NSSortDescriptor("counter", ascending: true)]

  do {
    let results = try cdh.managedObjectContext.executeFetchRequest(fetchRequest) as! [Type]
    let options = results.map($0.entity) as! [Entity]
    //Type is already sorted
    return options
  } catch {
    fatalError("Fetch failed: \(error)")
  }
}

此代码不是 100%,因为我无权访问您的项目,并且我不会这样命名我的实体。但出于演示目的,它向您展示了一个选项。

关于ios - 快速排序具有许多关系的实体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36427787/

相关文章:

ios - 获取视频名称 AlAssetLibrary

javascript - Array(5) 是否等同于 var a = []; a.长度=5;在 JS 中?

c# - 在传递给 C 或 C# 中的函数时,数组是否像指针一样工作?

c++ - 使用 CUDA 查找数组中未知大小区域的最大值

ios - 解析服务器云代码查询语法错误141

ios - 为什么应用程序在 itunes API 中找不到歌曲时会崩溃?

ios - 快速从数组中删除自定义类型的元素

ios - React-Native 中的 '...' 是什么意思?

iOS swift 4 :How to perform encryption/decryption with DES-ECB-PKCS5Padding?

swift - 外设 didDiscoverCharacteristicsfor 服务中不允许使用 UUID