如何使用姓氏对核心数据进行排序,只有全名可用?

Posted

技术标签:

【中文标题】如何使用姓氏对核心数据进行排序,只有全名可用?【英文标题】:How to sort Core Data using the last name, with only a full name available? 【发布时间】:2016-10-14 01:46:40 【问题描述】:

我的核心数据实体Friends 中有一个fullName 属性,其值如下:

约翰·多伊 简·史密斯 乔博客

我希望能够在 Swift 中提取姓氏,并按字母顺序进行排序。

我目前只知道如何使用全名进行排序,如下所示:

let sortDescriptor = NSSortDescriptor(key: "fullName", ascending: true)
request.sortDescriptors = [sortDescriptor]

谢谢。

【问题讨论】:

使用 sqlite 后端,如果不将所有记录提取到数组中并自己进行排序,这是不可能的。您要么必须这样做,要么更改您的数据模型(除非您不使用 sqlite 作为后端,在这种情况下您可以使用计算属性,但您可能使用 sqlite 作为后端)。 @RobNapier 你能举个代码例子吗?我目前正在尝试.sort(by: lastNameASC),我正在尝试将其写下来,但我们将不胜感激。 在 Friends 实体中添加 lastName 列总是更好。因此,您不必编写大量代码。 你在一个名字和姓氏总是在一个词中的完美世界中玩耍? @FredericP 是的,我明白了(现在)。首先有两列可能是一个更好的主意。 【参考方案1】:

您可以按照以下方式进行操作。

1) 从核心数据中获取所有记录。 (假设你得到了aryFullname

2) 使用 for 循环,您可以只获取数组的姓氏,如下所示。

//Define new mutable array aryfinalData
         for i in 0..<aryFullname.count
                
                  var fullName = aryFullname.ObjectAtindex(i)
                  var fullNameArr = split(fullName) $0 == " "
                  var lastName: String? = fullNameArr.count > 1 ? fullNameArr[1] : nil
                  aryfinalData.addObject(lastName)
                 

3) 数组排序如下。

 //  convert NSMutableArray to the Array by using below line of code. 
    let arySort = aryfinalData as AnyObject as! [String]
    var sortedArray = arySort.sort  $0.name < $1.name 
 //  sortedArray is your Final array

注意:这不是一个有效的解决方案,但您没有任何解决方案,而且我不确定上述语法,因此请注意相同的内容并根据需要进行更改。

【讨论】:

以上是关于如何使用姓氏对核心数据进行排序,只有全名可用?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 ios 中结合个人实体的名字和姓氏来对全名应用谓词

如何按单元格值的子字符串排序?

SQL - 连接全名,只有在姓氏存在时才有空格

如何对加密的列数据进行排序?

核心数据 - 可以使用 NSSortDescriptor 中的块对 TableView 进行排序吗?

如何使用选择排序按三个不同的方面排序