Подтвердить что ты не робот

Сортировка массива String и игнорирование случая

В приведенном ниже коде используется сортировка массива строк, если все они имеют строчный или верхний регистр, но я хочу игнорировать случай, когда сортирую. Как я могу это сделать? Ниже представлен массив пользовательского класса.

resultListArray.sort({ $0.fileName.compare($1.fileName) == NSComparisonResult.OrderedAscending })

4b9b3361

Ответ 1

Вы можете использовать метод String localizedCompare()

обновление: Xcode 8.2 • Swift 3.0.2

let array = ["def","Ghi","Abc" ]

let sorted1 = array.sorted{$0.compare($1) == .orderedAscending} 
print(sorted1)  // ["Abc", "Ghi", "def"] this is case SENSITIVE!

let sorted2 = array.sorted{$0.localizedCompare($1) == .orderedAscending}
print(sorted2) // ["Abc", "def", "Ghi"]


// you can also use the String compare options parameter to give you more control when comparing your strings
let sorted3 = array.sorted{$0.compare($1, options: .caseInsensitive) == .orderedAscending }
print(sorted3)   // ["Abc", "def", "Ghi"]\n"

// which can be simplifyed using the string method caseInsensitiveCompare
let sorted4 = array.sorted{$0.caseInsensitiveCompare($1) == .orderedAscending}
print(sorted4) // ["Abc", "def", "Ghi"]\n"

// or localized caseInsensitiveCompare
let array5 = ["Cafe B","Café C","Café A"]
let sorted5 = array5.sorted{$0.localizedCaseInsensitiveCompare($1) == .orderedAscending}
print(sorted5) // "["Café A", "Cafe B", "Café C"]\n"

Ответ 2

Вы можете преобразовать String в нижний регистр, а затем сравнить его:

array.sort{ $0.lowercaseString < $1.lowercaseString }

Ответ 3

Это метод, который должен использоваться и предназначен для этой цели:

public func caseInsensitiveCompare(aString: String) -> NSComparisonResult

В вашем случае:

resultListArray.sort({ $0.fileName.caseInsensitiveCompare($1.fileName) == NSComparisonResult.OrderedAscending })