Swift:字典,删除零的键和值

Posted

技术标签:

【中文标题】Swift:字典,删除零的键和值【英文标题】:Swift: Dictionary, Remove key and value that are nil 【发布时间】:2016-07-24 23:48:06 【问题描述】:

我有一个获取请求正在返回的字典。然后将该字典放入来自[String: NSDate] 的日期数组中。该字典的值为[:]。我无法做任何事情来删除它。任何人都可以帮忙,因为我已经花了两个晚上尝试一切。

  let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]]
  print("results \(results)")     
  dates = results.map  $0["savedTime"]! as NSDate 

由于 savedTime Key 为 nil 导致失败

打印结果是

[[“保存时间”:2016-07-19 23:00:00 +0000],[:]]

【问题讨论】:

是的,我知道。对不起,我忘了问如何从字典中删除 [:]。 【参考方案1】:

这个构造$0["savedTime"]! 是错误的。将! 放在对象上意味着您知道该对象将始终存在,但并不总是存在。你在对编译器撒谎,所以它正在崩溃。尝试删除!

此外,没有必要放置as NSDate,因为您已经在上面的行中告诉编译器这些值是NSDates。最后,由于并非所有字典都有正确的键,因此您需要删除任何不正确的键。有几种方法可以做到这一点,一种是过滤掉 nil。另一种是使用 flatMap 来同时转换和过滤掉 nil。

然后你会得到下面的结果。

let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]]
print("results \(results)")
dates = results.flatMap  $0["savedTime"] 

我担心即使是上面的,虽然它编译和运行,可能不是你真正需要的。从 managedObjectContext 中取出字典数组是一件相当奇怪的事情......

【讨论】:

谢谢你的工作。我已经将 ManagedObjectContext 用于 tableview 等,但是为了获取值数组以获取平均值等,我偶然发现了字典,到目前为止它们似乎运行良好。

以上是关于Swift:字典,删除零的键和值的主要内容,如果未能解决你的问题,请参考以下文章

从 OrderedDict 中删除键和值

在iOS9 swift中的字典类型中添加数组作为键和值

将字典的键和值并行传递给函数?

显示 % forloop% 的键和值的 Django 模板:如何遍历模板中的字典?

获取以索引为导向的嵌套字典中的键和值列表

将字典的键和值从“unicode”转换为“str”的最快方法?