2016-04-04 16 views
27

私はswift.Iの新しいアルファベット順の配列の並べ替えを実装する必要がある1つのサンプルアプリケーションをしようとしています.Jsonのデータを取得して、 array.Now私が取得していますエラーメッセージが「はタイプの引数リスト「(NSMutableArrayので 『ソート』を起動することはできませんですアルファベット順の配列の並べ替え

func updateSearchResults(data: NSData?) 
{ 
    do 
    { 
      let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 

      if let blogs: NSArray = json["results"] as? [AnyObject] { 
       print(blogs) 
       for blog in blogs { 
        if let name = blog["original_title"] as? String { 
         names.addObject(name) 
        } 
       } 
       print(names) 
       **let sortedArray = sorted(names, { 
       (str1: String, str2: String) -> Bool in 
       return str1.toInt() < str2.toInt()** // Here I am getting the Error Message 
       }) 

      } 
    } 
    catch { 
     print("error serializing JSON: \(error)") 
    } 
} 

..... alphabetically.Hereが私のコードであることを並べ替えしたいと思います、(String、String) - > Bool) '"

これを達成するために多くの努力をしましたが、解決策が見つかりませんでした。 この問題の解決にお手伝いできますか? ありがとうございました。

+0

Swiftの 'Array'ではなく' NSArray'を使うのはなぜですか? – jjatie

答えて

54

最初にNSMutableArrayを以下のコード行を使用して配列に変換します。

let swiftArray = mutableArray as AnyObject as! [String] 

以下のコード行を使用して配列をソートします。

var sortedArray = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending } 

sortクローズを確認してください。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

スウィフト3.0

var sortedArray = swiftArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending } 
+0

"NSMutableArray型の値に 'ソートされた'メンバーがありません。 –

+0

@anushahrithi' sorted'が削除されました。代わりに 'sort'を使用してください。 – ColGraff

+0

あなたが(それは一つだけだ場合でも)ソート記述子の配列を渡す必要があります。 VAR記述子:NSSortDescriptor = NSSortDescriptor(キー: "名前"、昇順:真) するvar sortedResults:NSArrayの= results.sortedArrayUsingDescriptors([記述子]) – iOS

17

の更新ウル配列については

let sortedNames = names.sort { $0.name < $1.name } 

をソートする行のこの単純なコードを使用しスウィフト4あなただけのこの

let sortedNames = names.sorted(by: <) 
+0

@Kennethはい、このシナリオでもこれはうまくいくでしょう –

+1

'名前'は 'Array 'の型を持つように見えるので、' name'というプロパティはありません。あなたの呼び出しは 'names.sort {$ 0 <$ 1}'のようになります。これは 'names.sort(<)'と短絡することさえあります。 – ColGraff

+0

これは大文字の使用を考慮していません(他の言語に翻訳する場合は他にもありそうです)。例えば、「袋」は「芸術」の前に来るだろう。 – jjatie

-1
を使用することができます

試してみてください

var names = [ "Alpha", "alpha", "bravo"] 
var sortedNames = names.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending } 
print(sortedNames) //Logs ["Alpha", "alpha", "bravo"] 
0
var names = [ "Alpha", "alpha", "bravo"] 
var sortedNames = names.sort { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending } 
print(sortedNames) //Logs ["Alpha", "alpha", "bravo"] 

スウィフト3溶液:オブジェクトの配列について

3

をjjatieする

let yourStringArray = [ "beTA", "ALPha", "Beta", "Alpha"] 
var sortedArray = yourStringArray.sorted() 
// Result will be ["ALPha", "Alpha", "Beta", "beTA"] 

credsを:

items = items.sorted(by: { (item1, item2) -> Bool in 
     return item1.product.name.compare(item2.product.name) == ComparisonResult.orderedAscending 
    }) 
+0

場合によっては、名前にlowercased()を使用することもできます:) – genaks

0

スイフト4(作業コード)

JSON応答 - >

"DATA": [ 
{ 
     email = "[email protected]"; 
     firstname = Harvey 
}, 
{ 
     email = "[email protected]"; 
     firstname = poonam 
}, 
{ 
     email = "[email protected]"; 
     firstname = rahul 
}, 
{ 
     email = "[email protected]"; 
     firstname = Chulbulx 
}, 
{ 
     email = "[email protected]"; 
     firstname = rahul 
}, 
{ 
     email = "[email protected]"; 
     firstname = Jay 
}, 
{ 
     email = "[email protected]"; 
     firstname = Roy 
}, 
{ 
     email = "[email protected]"; 
     firstname = Regan 
}, 
{ 
     email = "[email protected]"; 
     firstname = Jaydip 
} 
] 

aryNameList

に格納されたコード

self.aryNameList = self.aryNameList.sorted(by: { (Obj1, Obj2) -> Bool in 
     let Obj1_Name = Obj1.firstname! 
     let Obj2_Name = Obj2.firstname! 
     return (Obj1_Name.localizedCaseInsensitiveCompare(Obj2_Name) == .orderedAscending) 
    }) 

全ての場合の作業(例のために:小文字、大文字..)

関連する問題