Как получить значение массива выбранных ключей из массива быстрых словарей и его сложность - PullRequest
0 голосов
/ 05 ноября 2019

Допустим, я получил ответ ниже. Две вещи, которые я хотел бы узнать из приведенной ниже операции.

1.) Как улучшить / оптимизировать приведенный ниже код, используя функции более высокого порядка в swift.

2.) Также хотелось бы узнать текущую сложность кода и сложность любого оптимизированного кода, который вы можете предложить.

В приведенном ниже ответе я хотел бы проверить значения толькоопределенные ключи, как описано в keysToBeChecked и для этого конкретного ключа мне нужно сделать операцию. После завершения операции я хочу добавить новый ключ (ключ 6) в ответ, как показано ниже. Следующая операция отлично работает для меня, и это то, что я собираюсь сделать. Я ищу упомянутые выше 2 вещи

var response = [["key1": 1, "key2": 0, "name": "John", "key3": 1, "key4": 1, "place": "Newyork", "key5": 0],
                ["key1": 0, "key2": 1, "name": "Mike", "key3": 1, "key4": 0, "place": "California", "key5": 1],
                ["key1": 1, "key2": 0, "name": "John", "key3": 0, "key4": 1, "place": "Boston", "key5": 1]]
let keysToBeChecked = ["key1", "key2", "key3", "key4", "key5"]

for var item in response{
var dict = [String: String]()
   for(key, value) in item{
       if keysToBeChecked.contains(key){
           dict[key] = "\(value)"
           if dict[key] == "1"{
               //perform required operations
               output
           }
       }
   }

   item["key6"] = output
   response.append(item)
}
print(response)//should print the below


My expected output is

response = [["key1": 1, "key2": 0, "name": "John", "key3": 1, "key4": 1, "place": "Newyork", "key5": 0, "key6": "output"],
   ["key1": 0, "key2": 1, "name": "Mike", "key3": 1, "key4": 0, "place": "California", "key5": 1, "key6": "output"],
   ["key1": 1, "key2": 0, "name": "John", "key3": 0, "key4": 1, "place": "Boston", "key5": 1, "key6": "output"]]

1 Ответ

0 голосов
/ 05 ноября 2019

Для функции высшего порядка , вы можете попробовать,

let result = response.map { (dict) -> [String:Any] in
    var filteredDict = [String:Any]()
    dict.forEach({ (key, value) in
        if keysToBeChecked.contains(key) {
            filteredDict[key] = value
            if (value as? Int) == 1 {
                filteredDict["key6"] = "output"
            }
        }
    })
    return filteredDict
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...