我有一個字典數組,我的字典是類型[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