web-dev-qa-db-ja.com

swiftでのアルファベット順の配列の並べ替え

私はSwiftを初めて使用しています。配列のアルファベット順の並べ替えを実装する必要がある1つのサンプルアプリを試しています.jsonデータを取得し、配列にタイトルを追加しています。今、アルファベット順に並べ替えたいここに私のコードがあります.....

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)")
    }
}

私が得ているエラーメッセージは"タイプ '(NSMutableArray、(String、String)-> Bool)'"の引数リストで 'sorted'を呼び出すことはできません

これを達成するために多くのことを試みましたが、解決策が見つかりませんでした。誰でもこの問題を解決するのを手伝ってもらえますか。前もって感謝します。

37
anusha hrithi

まず、次のコード行を使用して、NSMutableArrayを配列に変換します。

let swiftArray = mutableArray as AnyObject as! [String]

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

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

sort Closuresについては、以下のリンクを確認してください。 https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

Swift 3.0の更新

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

この単純な行コードを使用して、ur配列をソートします

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

Swift 4の場合、これのみ使用できます

let sortedNames = names.sorted(by: <)
30
Moin Shirazi

Swift4

var names = [ "Alpha", "alpha", "bravo", "beta"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha","beta", "bravo"]
10
kolisko

Swift 4(作業コード)

JSONレスポンス-> aryNameListに保存

"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
}
]

コード

    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)
    })

すべてのケースで動作(例:lowerCase、upperCase ..)

7
Krunal Patel

オブジェクトの配列の場合:

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

Swift 3ソリューション:

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

ジャティへの信条

0
Erik Nguyen

これを試して

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