#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
Примечание: Это неэффективное решение, но у вас нет никакого решения, и я не уверен в приведенном выше синтаксисе, поэтому позаботьтесь о том же и внесите изменения, если таковые потребуются.