繁体   English   中英

Swift:对数字字符串字典进行排序

[英]Swift: Sort Dictionary of Number Strings

我有一个数字字符串字典,看起来像这样:

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"]]

如何对字典排序,使其以数字顺序返回键?

例如: ["1":["title" : "first title"],"2":["title" : "second title"],"10": ["title" : "last title"]]

谢谢'

根据定义,Swift中的字典是未排序的集合。 如果要维持订单,则需要使用其他类型。

但是,如果您有兴趣的话,看起来这家伙在Swift中写了OrderedDictionary

学习Swift:有序词典

或者,一种快速的肮脏解决方案是将键提取到数组中,对其进行排序,然后遍历数组并使用键进行字典查找。

如果您想要一个可以表示数据的结构数组

struct Model
{
  var key:String!
  var title:String!
  // etc...
}

然后声明该结构的数组:

     var arrayOfStructure = [Model]()

然后你排序

您的示例中的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"])]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM