Как отсортировать основные данные, используя фамилию, при наличии только полного имени?

#ios #swift #sorting #core-data #swift2

#iOS #swift #сортировка #core-data #swift2

Вопрос:

У меня есть fullName свойство в моей сущности Core Data Friends , которое имеет такие значения, как:

  • Джон Доу
  • Джейн Смит
  • Джо Блоггс

Я хочу иметь возможность извлекать фамилию и сортировать их по алфавиту в Swift.

В настоящее время я знаю только, как сортировать, используя полное имя, например:

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

Спасибо.

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

1. С серверной частью sqlite это невозможно без простой выборки всех записей в массив и их самостоятельной сортировки. Вам придется либо сделать это, либо изменить свою модель данных (если вы не используете sqlite в качестве серверной части, и в этом случае вы можете использовать вычисляемое свойство, но вы, вероятно, используете sqlite в качестве серверной части).

2. @RobNapier Не могли бы вы привести пример кода? В настоящее время я пытаюсь .sort(by: lastNameASC) , что я пытаюсь записать, но некоторая помощь была бы признательна.

3. Всегда лучше добавлять столбец LastName в объект Friends. Так что вам не нужно писать много кода.

4. Вы играете в идеальном мире, где имя и фамилия всегда состоят из одного слова?

5. @FredericP Да, я понял это (сейчас). Вероятно, было бы лучше иметь два столбца в первую очередь.

Ответ №1:

Вы можете сделать следующее.

1) Извлеките все записи из основных данных. (Предположим, у вас есть get aryFullname )

2) Используя цикл for, вы можете получить массив только last name следующим образом.

 //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
 

Примечание: Это неэффективное решение, но у вас нет никакого решения, и я не уверен в приведенном выше синтаксисе, поэтому позаботьтесь о том же и внесите изменения, если таковые потребуются.