在Swift 3中如何删除字典中值为null的键

3

嗨,我需要删除没有值的字典键。我尝试了许多代码,但都不起作用。我只需要包含值的键的字典,并且我需要在Swift 3中完成它。

["H": [], "X": [], "D": ["D1\r\n\r\n"], "J": ["J1\r\n"], "I": [], "M": [], "Z": [], "S": [], "A": ["A2"], "C": ["C2\r\n\r\n"], "N": [], "Y": [], "R": [], "G": [], "E": ["Emmm\r\n"], "V": [], "U": [], "L": [], "B": ["B2"], "K": ["King"], "F": [], "O": [], "W": [], "T": ["Test", "Test2"], "P": [], "Q": ["Queen"]]
2个回答

4

我尝试了这段代码,对我有效。

var dict: [String: [Any]] = ["H": [], "X": [], "D": ["D1\r\n\r\n"], "J": ["J1\r\n"], "I": [], "M": [], "Z": [], "S": [], "A": ["A2"], "C": ["C2\r\n\r\n"], "N": [], "Y": [], "R": [], "G": [], "E": ["Emmm\r\n"], "V": [], "U": [], "L": [], "B": ["B2"], "K": ["King"], "F": [], "O": [], "W": [], "T": ["Test", "Test2"], "P": [], "Q": ["Queen"]]
for (key, value) in dict where value.isEmpty {
   dict.removeValue(forKey: key)
}

我建议使用if value.isEmpty,这样更易读。你也可以将条件放入循环中:for (key, value) in dict where value.isEmpty { dict.removeValue(forKey: key) } - Nikolai Ruhe
@NikolaiRuhe 根据评论修改了答案。谢谢。 :) - Nayana

2
我认为你的意思是“删除值为[]的KVPs”,而不是“删除值为nil的KVPs”。
使用filter方法可以实现,但它返回一个由KVP元组组成的数组,所以你需要使用for循环将它们全部添加到新的字典中。
let dict = ["H": [], "X": [], "D": ["D1\r\n\r\n"], "J": ["J1\r\n"], "I": [], "M": [], "Z": [], "S": [], "A": ["A2"], "C": ["C2\r\n\r\n"], "N": [], "Y": [], "R": [], "G": [], "E": ["Emmm\r\n"], "V": [], "U": [], "L": [], "B": ["B2"], "K": ["King"], "F": [], "O": [], "W": [], "T": ["Test", "Test2"], "P": [], "Q": ["Queen"]]
var newDict = [String: [String]]()
for (key, value) in dict.filter({ !$0.1.isEmpty }) {
    newDict[key] = value
}

或者,你可以通过仅循环一次字典来完成此操作:

let dict = ["H": [], "X": [], "D": ["D1\r\n\r\n"], "J": ["J1\r\n"], "I": [], "M": [], "Z": [], "S": [], "A": ["A2"], "C": ["C2\r\n\r\n"], "N": [], "Y": [], "R": [], "G": [], "E": ["Emmm\r\n"], "V": [], "U": [], "L": [], "B": ["B2"], "K": ["King"], "F": [], "O": [], "W": [], "T": ["Test", "Test2"], "P": [], "Q": ["Queen"]]
var newDict = [String: [String]]()
for (key, value) in dict where !value.isEmpty {
    newDict[key] = value
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接