iOS - 在字典问题中排序

时间:2017-12-19 14:40:31

标签: arrays swift dictionary

我正在尝试从排序的数组(字符串)创建字典。 这是代码:

  var usernameCommentsSorted: [String : [String : String]] = [:]
  print("not sorted: \(Array(usernameComments.keys))")
  let sortedKeys = Array(usernameComments.keys).sorted()
  print("sorted: \(sortedKeys)")

  for time in sortedKeys {

    print("time in for loop -- \(time) --")
    usernameCommentsSorted[time] = ["F" : "F"]

  }

  print("sorted final dictionary: \(usernameCommentsSorted)")

这是输出:

image

所以我的问题是,为什么字典没有像for in循环那样接收时间?也许我错过了一些词典的行为。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

Array在Swift中有价值观。当您致电Array(usernameComments.keys)时,它会创建字典键的副本。当您致电.sorted时,您正在调用创建副本的版本(.sort进行就地排序)。在任何情况下,您都不能改变字典的键数组。但是,您可以保留数组的单独排序副本,您需要在修改字典时更新该副本。然后你可以按照排序顺序遍历字典,如:

for key in sortedKeys {
   print(dictionary[key]!)
}

Apple确实有一个客观的C类,它是一个有序的哈希表。考虑NSMutableOrdered set是否是您的用例的更好的数据结构选择。顾名思义它具有您可以订购的唯一键。