![](/img/trans.png)
[英]Table updates from JSON array but sorting alphabetically causes error in Swift 3
[英]Sorting of an array alphabetically in 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)")
}
}
我得到的错误消息是“无法使用类型'的参数列表调用'sorted'(NSMutableArray,(String,String) - > Bool)'”
我尝试了很多来实现这一点,但我没有找到解决方案。 任何人都可以帮我解决这个问题。 提前致谢。
首先使用下面的代码行将NSMutableArray
转换为Array。
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
Swift 3.0的更新
var sortedArray = swiftArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
使用这个简单的行代码来排序你的数组
let sortedNames = names.sort { $0.name < $1.name }
对于Swift 4,您只能使用它
let sortedNames = names.sorted(by: <)
Swift4
var names = [ "Alpha", "alpha", "bravo", "beta"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha","beta", "bravo"]
对于一个对象数组:
items = items.sorted(by: { (item1, item2) -> Bool in
return item1.product.name.compare(item2.product.name) == ComparisonResult.orderedAscending
})
Swift 4(工作代码)
JSON响应 - >存储在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
}
]
码
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 ..)
试试这个吧
var names = [ "Alpha", "alpha", "bravo"]
var sortedNames = names.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha", "bravo"]
Swift 3解决方案:
let yourStringArray = [ "beTA", "ALPha", "Beta", "Alpha"]
var sortedArray = yourStringArray.sorted()
// Result will be ["ALPha", "Alpha", "Beta", "beTA"]
对jjatie的信用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.