按Swift中的值排序字典
发布时间:2020-12-14 05:36:02 所属栏目:百科 来源:网络整理
导读:在 swift中是否有 – (NSArray *)keysSortedByValueUsingSelector:(SEL)比较器的模拟? 如何做这个没有投射到NSDictionary? 我试过这个,但似乎不是一个很好的解决方案. var values = Array(dict.values)values.sort({ $0 $1 })for number in values { for
在
swift中是否有 – (NSArray *)keysSortedByValueUsingSelector:(SEL)比较器的模拟?
如何做这个没有投射到NSDictionary? 我试过这个,但似乎不是一个很好的解决方案. var values = Array(dict.values) values.sort({ $0 > $1 }) for number in values { for (key,value) in dict { if value == number { println(key + " : (value)"); dict.removeValueForKey(key); break } } } 例: var dict = ["cola" : 10,"fanta" : 12,"sprite" : 8] dict.sortedKeysByValues(>) // fanta (12),cola(10),sprite(8)
尝试:
let dict = ["a":1,"c":3,"b":2] extension Dictionary { func sortedKeys(isOrderedBefore:(Key,Key) -> Bool) -> [Key] { return Array(self.keys).sort(isOrderedBefore) } // Slower because of a lot of lookups,but probably takes less memory (this is equivalent to Pascals answer in an generic extension) func sortedKeysByValue(isOrderedBefore:(Value,Value) -> Bool) -> [Key] { return sortedKeys { isOrderedBefore(self[$0]!,self[$1]!) } } // Faster because of no lookups,may take more memory because of duplicating contents func keysSortedByValue(isOrderedBefore:(Value,Value) -> Bool) -> [Key] { return Array(self) .sort() { let (_,lv) = $0 let (_,rv) = $1 return isOrderedBefore(lv,rv) } .map { let (k,_) = $0 return k } } } dict.keysSortedByValue(<) dict.keysSortedByValue(>) 更新: 更新到新数组语法并从beta 3排序语义.请注意,我正在使用排序,而不是排序以最小化数组复制.通过查看早期版本并将排序和将KeyType []修复为[KeyType]替换排序,可以使代码更加紧凑, 更新到Swift 2.2: 从KeyType更改为Key,将ValueType更改为Value.使用新的内置函数到Array而不是sort(Array)注意,使用sortInPlace而不是排序可以稍微改进所有这些的性能 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- 通过Ajax使用FormData对象无刷新上传文件方法
- ruby-on-rails – Resque ..如何获得队列列表
- c# – System.Spatial程序集问题
- Cannot find an initializer for type '[(St
- U-boot的环境变量: bootcmd 和bootargs
- IO设计模式:Reactor和Proactor对比
- 设计模式六大原则(2):里氏替换原则
- 从石墨/ grafana的初始值单一百分比变化?
- org.xmlpull.v1.XmlPullParserException: PI mus
- ruby – 通过要求gem:path或:git来实现LoadErr
热点阅读