2015-05-23 1 views
10

Я хотел бы отсортировать мой массив с быстрой структурой, используя другой метод сравнения (например, localizedCompare, caseInsensitiveCompare или localizedCaseInsensitiveCompare). Быстрая стандартная функция сортировки строковых массивов упорядочивает все прописные буквы перед строчными буквами. Вот мой код:Swift: сортировать массив с альтернативным сравнением

import Foundation 

struct DataStruct { 

    struct Item { 
     let title: String 
     let number: Int 
    } 

     static var items = [ 
     Item(title: "apple", number: 30), 
     Item(title: "Berry", number: 9), 
     Item(title: "apple", number: 18)] 
} 

class DataFunctions { 
    func sortItemsArrayTitle() { 
     DataStruct.items.sort { $0.title < $1.title } 
    } 
} 

После вызова, приведенный выше код приводит к [Ягода, яблоко, яблоко]. Неприемлемо. Какие-либо предложения?

+1

DataStruct.items.sort {$ 0.title.lowercaseString < $ 1.title.lowercaseString} –

ответ

23

Вы можете легко решить путем сравнения заголовка lowercaseString следующим образом:

DataStruct.items.sort { $0.title.lowercaseString < $1.title.lowercaseString } 

с использованием localizedCompare он должен выглядеть следующим образом:

DataStruct.items.sort { $0.title.localizedCompare($1.title) == .OrderedAscending } 
+0

Это хорошо работает. Благодарю. Я также нашел lowercaseStringWithLocal, что я также могу изучить. Любая помощь в том, как реализовать такие методы, как localizedCompare? – Shane

+0

Еще раз спасибо. Просто нужно «return»: DataStruct.items.sort {return $ 0.title.localizedCompare ($ 1.title) == .OrderedAscending} – Shane

Смежные вопросы