я пытаюсь изменить значение в одном словаре, сравнивая ключ из другого словаря - PullRequest
1 голос
/ 28 мая 2020
var clariQuestion: [String: String] = ["0": "What are my last 10 transactions",
                                    "1": "What are my spending transactions",
                                    "2": "What are my largest trasactions",
                                    "3": "What are my pending tracnstions"]

var explanationActionParameters: [String: Any] = ["clariQuestion": 2]

Итак, мне нужно сопоставить значение объясненияActionParameters с ключом clariQuestion, а затем, когда ключи совпадают, замените число 2 в объясненииActionParameters на «каковы мои самые большие транзакции». Что вызывает у меня затруднения, так это то, что значение в объясненииActionParameter имеет тип 2, а ключ в clariQuestion имеет тип String. Не знаю, как go об этом

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете либо преобразовать свой int в строку, используя String(2), либо преобразовать свою строку в int, например Int("2") Мой ответ - преобразовать ваш словарь clariQuestion в массив, потому что ключи являются целыми числами, а array можно рассматривать как словарь, где ключи являются целыми числами. Итак, вы могли бы сделать

var clariQuestion: [String] = ["What are my last 10 transactions",
                                "What are my spending transactions",
                                "What are my largest trasactions",
                                "What are my pending tracnstions"]
var explanationActionParameters: [String: Any] = ["clariQuestion": 2]

let questionIndex = explanationActionParameters["clariQuestion"]
let question = clariQuestion[questionIndex]

Если вы настаиваете на сохранении этой структуры словаря, вы можете flatmap свои словари и преобразовать все ключи из строки в int, как это

clariQuestion.flatMap { (key, value) in [Int(key) : value] }

или преобразуйте все свои значения в строку, например

explanationActionParameters.flatMap { (key, value) in [key : String(value)] }

В любом случае, теперь у вас должен быть доступ к элементам в этих словарях. Я собираюсь создать функцию, демонстрирующую, как

func replace(_ clariQuestion: [String : String], _ explanationActionParameters: [String: Any]) -> [String: String] {
    // The dictionary that will be returned containing the mapping from clariQuestion to explanationActionParameters
    var ret = [String : String]()
    let mappedClariQuestion = clariQuestion.flatMap { (key, value) in [Int(key) : value] }
    for (key, value) in clariQuestion {
        ret[key] = mappedClariQuestion[value]
    }

    return ret
}

Затем просто explanationActionParameters = replace(clariQuestion, explanationActionParameters)

...