2015-09-06 32 views
11

以下のコードは、文字列がすべて小文字か大文字であればソートするために機能しますが、ソートすると大文字小文字を無視します。どうすればこのことができますか?以下は、カスタムクラスの配列です。文字列配列のソートと大文字小文字の区別

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

答えて

20

更新:のXcode 8.2•スウィフト3.0.2

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

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

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

ありがとうございました! –

+0

@GaryDormanあなたはようこそ –

1

ここsortは物事を注文する方法を変更するan answer about overriding compareTo in Javaです。文字列を大文字に変換して比較すればどうなるでしょうか?

あなたは文字列のメソッドlocalizedCompareを(使用することができます
+1

私はスウィフトでプログラミングしています。通常は、文字列を大文字または小文字に変換できますが、今回はオプションではありません。 –

+0

ああ、私の謝罪。私はそのタグを間違えた。この質問を参照してください:https://stackoverflow.com/questions/31871395/swift-2-iterating-and-upper-lower-case-some-characters – Davislor

+1

これは動作するようになりました。ありがとうございました! –

6

あなたはStringは小文字とし、それを比較するために変換することができます:

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

これは、この目的のために使用する必要がある方法です。

あなたのケースでは
public func caseInsensitiveCompare(aString: String) -> NSComparisonResult 

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