我有一个字典数组,我的字典是类型[String:AnyObject]。下面是一些数据:在Swift中对多个条件的字典数组进行排序
[{
name = Joe;
score = 50;
favorite = Phone;
startDate = "2015-10-15";
startingTime = "2015-10-15 19:00:00 +0000";
finished = "<null>";
}, {
name = Mark;
score = 60;
favorite = Phone;
startDate = "2015-10-16”;
startingTime = "2015-10-16 19:00:00 +0000";
finished = "<null>";
}, {
name = Joe;
score = 30;
favorite = Phone;
startDate = "2015-10-15";
startingTime = "2015-10-15 19:00:00 +0000";
finished = "<null>";
}]
我要的是能够理清这些最早由名称,然后通过startingTime,那么如果这些都匹配,那么按分数(我的分数存储为一个字符串,虽然)。
我知道这是非常错误的,但我键入:
test.sort({ $0.name! < $1.name! })
这给了我一个错误“无法调用‘排序’类型的参数列表“((_,_) - > _) ”“。
任何人都可以阐明如何做到这一点?
**更新为具有与视图控制器代码的答案
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var allArray = [AnyObject]()
var array = [String:AnyObject]()
array["name"] = "Joe"
array["score"] = 50 as Int
array["favorite"] = "Phone"
array["startDate"] = "2015-10-15"
let date = NSDate()
array["date"] = date
array["finished"] = nil
allArray.append(array)
array["name"] = "Mark"
array["score"] = 60 as Int
array["favorite"] = "Phone"
array["startDate"] = "2015-10-16"
array["date"] = date
array["finished"] = nil
allArray.append(array)
array["name"] = "Joe"
array["score"] = 30 as Int
array["favorite"] = "Phone"
array["startDate"] = "2015-10-15"
array["date"] = date
array["finished"] = nil
allArray.append(array)
println(allArray)
allArray.sort {
if let name0 = $0["name"] as? String, name1 = $1["name"] as? String
where name0 != name1 {
return name0 < name1
}
// You said 'startingTime' in your question your code showed 'date'
if let date0 = $0["date"] as? NSDate, date1 = $1["date"] as? NSDate
where date0.timeIntervalSince1970 != date1.timeIntervalSince1970 {
return date0.timeIntervalSince1970 < date1.timeIntervalSince1970
}
// You have 'score' as String. I think you would want a numeric type instead
return ($0["score"] as! Int) < ($1["score"] as! Int)
}
println(allArray)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
谢谢!
您的数据看起来像是一种奇怪的JSON,它使用了等号和分号分隔符,并且没有引用字符串。可能会修复第一个 – spirographer
@ spirographer,这将是NSDictionary – jtbandes
@jbandes这不是我认识的任何语法。请参阅下面的答案,了解编译的语法。 – spirographer