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

时间:2017-08-22 05:42:23

标签: swift dictionary

嗨我需要删除没有值的字典键。我尝试了很多代码但没有工作。我只需要带有值的字典,我需要在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 个答案:

答案 0 :(得分:3)

我尝试了这段代码并为我工作。

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)
}

答案 1 :(得分:2)

我认为您的意思是"删除[]作为值"的KVP,而不是"删除nil作为值"的KVP。

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
}