在swift中按字母顺序排序数组

anu*_*thi 37 arrays sorting ios swift

我是swift的新手.我正在尝试一个示例应用程序,其中我需要按字母顺序实现数组的排序.我得到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)")
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误消息是"无法使用类型'的参数列表调用'sorted'(NSMutableArray,(String,String) - > Bool)'"

我尝试了很多来实现这一点,但我没有找到解决方案.任何人都可以帮我解决这个问题.提前致谢.

Pay*_*yar 80

首先NSMutableArray使用下面的代码行转换为Array.

let swiftArray = mutableArray as AnyObject as! [String]
Run Code Online (Sandbox Code Playgroud)

使用下面的代码行对数组进行排序.

var sortedArray = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
Run Code Online (Sandbox Code Playgroud)

检查以下链接是否有sort闭包. 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 }
Run Code Online (Sandbox Code Playgroud)


Moi*_*azi 30

使用这个简单的行代码来排序你的数组

 let sortedNames = names.sort { $0.name < $1.name }
Run Code Online (Sandbox Code Playgroud)

对于Swift 4,您只能使用它

let sortedNames = names.sorted(by: <)
Run Code Online (Sandbox Code Playgroud)

  • 由于`names`看起来具有类型`Array <String>`,因此它不具有属性`name`.你的调用应该像`names.sort {$ 0 <$ 1}`.这甚至可以缩写为`names.sort(<)`. (2认同)

kol*_*sko 12

Swift4

var names = [ "Alpha", "alpha", "bravo", "beta"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha","beta", "bravo"]
Run Code Online (Sandbox Code Playgroud)


Kru*_*tel 8

Swift 4(working code)

JSON response -> Stored in aryNameList

"DATA": [
{
        email = "iosworker@gmail.com";
        firstname = Harvey
},
{
        email = "poonam@openxcell.com";
        firstname = poonam
},
{
        email = "t@t.com";
        firstname = rahul
},
{
        email = "android.testapps@gmail.com";
        firstname = Chulbulx
},
{
        email = "t@t2.com";
        firstname = rahul
},
{
        email = "jaystevens32@gmail.com";
        firstname = Jay
},
{
        email = "royronald47@gmail.com";
        firstname = Roy
},
{
        email = "regmanjones@hotmail.com";
        firstname = Regan
},
{
        email = "jd@gmail.com";
        firstname = Jaydip
}
]
Run Code Online (Sandbox Code Playgroud)

Code

    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)
    })
Run Code Online (Sandbox Code Playgroud)

working every case (for ex: lowerCase, upperCase..)


Gig*_*ggs 7

对于一个对象数组:

items = items.sorted(by: { (item1, item2) -> Bool in
        return item1.product.name.compare(item2.product.name) == ComparisonResult.orderedAscending
    })
Run Code Online (Sandbox Code Playgroud)