您的位置:首页 > 移动开发 > Swift

IOS·Swift 集合类型之字典类型排序

2016-03-13 19:03 246 查看
       Swift语言提供了经典的数组和字典两种集合类型来存储数据。数组用来按顺序存储相同的类型的数据。字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对)。

        Swift语言里的数组和字典中存储的数据值类型必须明确。这意味着我们不能把不同正确的数据类型插入其中。同时这也说明我们完全可以对获取出的值类型非常自信。Swift对显式类型集合的使用确保了我们的代码对工作所需要的类型非常清楚。也让我们在开发中可以早早地找到任何的类型 不匹配错误。

        Swift的字典使用时需要具体规定可以存储键和值类型。不同于objective-C 的NSDictionary 和 NSMutableDictionary 类可以使用任何类型的对象来作为键 和 值并且不提供任何关于这些对象本质的信息。在Swift中,在某个预定的字典中可以存储的键 和 值必须提前定义清楚,方法是通过显性类型标注或者类型推断。

       清楚了字典的特性后就方便我们正确的使用。在实际开发中发现对字典排序的需求非常多,于是结合网上资料整理出如下代码以供大家参考:

按照键排序:

let dicGradeData:[Int:Array] = [1:["三班","四班","一班","二班"],6:["一班","二班","三班"],5:["一班","三班","二班"],2:["四班","一班","二班","三班"],3:["一班","二班","三班","四班"],4:["一班","三班","四班","二班"]]
NSLog("排序前:%@",dicGradeData)

//按照键降序排序
var arrTemp = dicGradeData.sort { (t1, t2) -> Bool in
return t1.0 > t2.0 ? true:false
}
print("按照键降序排序:")
for (key,value) in arrTemp{
print(key,value)
}

//按照键升序排序
arrTemp = dicGradeData.sort({ (t1, t2) -> Bool in
return t1.0 < t2.0 ? true:false
})
print("按照键升序排序:")
for (k,v) in arrTemp{
print(k,v)
}



按照值排序:

var arrDicData:[[String:NSObject]] = [[String:NSObject]]()
for i in 0..<10 {
arrDicData.append([
"ID": i,
"Age": 18 + (Int)(arc4random() % 100),
"Name":"test\(i + 1)",
"Sex":i % 2 == 0 ? "Man":"Woman",
"AddDatetime":(Int)(NSDate().timeIntervalSince1970)
])
}
NSLog("按照字典值排序前:%@",arrDicData)

let ageDesc:[[String:NSObject]] = arrDicData.sort { (t1, t2) -> Bool in
return (t1["Age"] as! Int) > (t2["Age"] as! Int) ? true:false
}
NSLog("按照年龄值降序排序后:%@",ageDesc)

(注:按照值升序排序做法同上,此处省略300行……)



本文只是抛砖引玉,如有纰漏请见谅!

关于Swift字典的其他基本用法请自行查找资料,可参考本网址:https://www.gitbook.com/book/numbbbbb/-the-swift-programming-language-/details
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息