我有一个数字字典字典,如下所示:
let comph : [String : [String : String]] = [
"1":["title" : "first title"],
"2":["title" : "second title"],
"10": ["title" : "last title"]
]
然后,当我使用comph.sort { $0.0 < $1.0 }
对词典进行排序时,我得到了这个:
let sortedComph = comph.sort { $0.0 < $1.0 }
print(sortedComph) //["1":["title" : "first title"],"10": ["title" : "last title"],"2":["title" : "second title"]]
如何对Dictionary进行排序,使其按数字顺序返回键?
例如:["1":["title" : "first title"],"2":["title" : "second title"],"10": ["title" : "last title"]]
感谢
答案 0 :(得分:2)
但是,如果您对此感兴趣,看起来这个人在Swift中写了一个OrderedDictionary
:
Learning Swift: Ordered Dictionaries
或者,快速n&#39;脏解决方案是将键提取到数组,对其进行排序,然后遍历数组并使用键进行字典查找。
答案 1 :(得分:0)
如果你想要,你可以拥有一个代表你数据的结构数组
struct Model
{
var key:String!
var title:String!
// etc...
}
然后声明该结构的数组:
var arrayOfStructure = [Model]()
然后你对它进行了分类
答案 2 :(得分:0)
示例中的sortedComph
常量不再是字典,而是(键,值)元组的数组。您遇到的问题是,在对字符串进行排序时,无需将字符串视为数值即可进行比较。 那是你需要解决的问题。
处理此问题的一种方法是在比较函数中从字符串创建Int?
个实例:
let sortedComph = comph.sort { Int($0.0) < Int($1.0) }
// [("1", ["title": "first title"]), ("2", ["title": "second title"]), ("10", ["title": "last title"])]
这样,生成的数组将按字符串键中的内容的整数值排序。任何非整数键都将在列表的开头分组,因为这是nil
排序的方式。
更强大的方法可能是使用NSString.compare(:options:)
方法:
let sortedComph = comph.sort {
($0.0 as NSString).compare($1.0, options: .NumericSearch) == .OrderedAscending
}
// [("1", ["title": "first title"]), ("2", ["title": "second title"]), ("10", ["title": "last title"])]