快速比较字典值

时间:2017-08-10 09:32:50

标签: ios arrays swift dictionary

我有一系列类型为

的词典
[["OptionId": 824, "QuestionId": 208],
["OptionId": 810, "QuestionId": 205],
["OptionId": 1017, "QuestionId": 257],
["OptionId": 0, "QuestionId": 201],
["OptionId": 0, "QuestionId": 199],
["OptionId": 0, "QuestionId": 200]]

我已遍历这些值并将字典值提取为

["OptionId": 824, "QuestionId": 208]
["OptionId": 810, "QuestionId": 205]
["OptionId": 1017, "QuestionId": 257]
["OptionId": 0, "QuestionId": 201]
["OptionId": 0, "QuestionId": 199]
["OptionId": 0, "QuestionId": 200]

现在,我希望得到所有那些“OptionId”的“QuestionId”,它们是0.如何将字典键值与零进行比较?提前谢谢。

这是我到目前为止所尝试的:

for dictionary in arrayofDict {
    print(dictionary)
    if (dictionary["OptionId"] == 0) {
        print("option not selected")
    }
} 

4 个答案:

答案 0 :(得分:3)

您需要对字典数组使用过滤器来获取字典,OptionId为0,然后使用flatMap获取相应的非可选QuestionId

let questionsDict: [[String:Any]] = [["OptionId": 824, "QuestionId": 208],["OptionId": 810, "QuestionId": 205], ["OptionId": 1017, "QuestionId": 257], ["OptionId": 0, "QuestionId": 201], ["OptionId": 0, "QuestionId": 199], ["OptionId": 0, "QuestionId": 200]]
let filtered = questionsDict.filter{($0["OptionId"] as? Int) == 0}.flatMap{$0["QuestionId"] as? Int} //contains 201,200,199

答案 1 :(得分:3)

使用单个flatMap可以完成“过滤器+地图”操作 调用(避免创建中间数组)。在你的情况下:

let arrayofDict = [["OptionId": 824, "QuestionId": 208],
                 ["OptionId": 810, "QuestionId": 205],
                 ["OptionId": 1017, "QuestionId": 257],
                 ["OptionId": 0, "QuestionId": 201],
                 ["OptionId": 0, "QuestionId": 199],
                 ["OptionId": 0, "QuestionId": 200]]

let notSelected = arrayofDict.flatMap { $0["OptionId"] == 0 ? $0["QuestionId"] : nil }

print(notSelected) // [201, 199, 200]

答案 2 :(得分:0)

试试这个:

   arr.filter {return $0["OptionId"] == 0}.flatMap {return $0["QuestionId"]}return $0["QuestionId"]}

答案 3 :(得分:0)

您可以按如下方式使用过滤器:

let searchPredicate = NSPredicate(format: "OptionId == %@",NSNumber.init(value: 0))
let filteredArray = arrayofDict.filter { searchPredicate.evaluate(with: $0) };
let result = filteredArray.flatMap{$0["QuestionId"]}