Создание нового Dict из значений другого - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть JSON вот так:

{
    "SKzSjdBuOpO49wkPVaxtmLQoR0O2": {
        location: "-LB1fn5GQKTaIc-fGNPS"
    }, 
    "s0ntSZP7mBQw1a8ua0E5PqazlqJ2": {
        location: "-LB23izD7bp2NhO0UuIo"
    }, 
    "FEScjelpNSR7vuVz1ha6Z6uSfF43": {
        location: "-LB1JLABuJO1NyJ-v2t_"
    }, 
    "mW7dGja6cRRB0d9uSIhg4f35PzC3": {
        location: "-LB5xqUvIjEgtW_FH_nG"
    }, 
    "GCnt0VKcqjT8bl2chw43nsntaZK2": {
        location: "-LB1n8ga9C0vCcZXD2Us"
    }
}

в моем Values[String: Any] словаре. И я хочу создать другой словарь из его значений для доступа к значению местоположения. Можете ли вы помочь мне сделать это?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Если основная цель - просто получить доступ к значениям, а тип установлен на [String: Any], сделайте это следующим образом:

if let info = dictionary["SKzSjdBuOpO49wkPVaxtmLQoR0O2"] as? [String : String] {
    let location = info["location"]
}
0 голосов
/ 27 апреля 2018

Старайтесь не использовать Dictionary в быстром, скорее для вашего случая вы можете использовать тип [String : [String: String]], а затем перебирать свои данные, чтобы получить необходимые значения. Попробуйте это

  let dict = ["SKzSjdBuOpO49wkPVaxtmLQoR0O2": [
        "location" : "-LB1fn5GQKTaIc-fGNPS",
        ], "s0ntSZP7mBQw1a8ua0E5PqazlqJ2": [
            "location" : "-LB23izD7bp2NhO0UuIo",
        ], "FEScjelpNSR7vuVz1ha6Z6uSfF43": [
            "location" : "-LB1JLABuJO1NyJ-v2t_",
        ], "mW7dGja6cRRB0d9uSIhg4f35PzC3": [
            "location" : "-LB5xqUvIjEgtW_FH_nG",
        ], "GCnt0VKcqjT8bl2chw43nsntaZK2": [
            "location" : "-LB1n8ga9C0vCcZXD2Us",
        ]]

    var newDict = [String: String]()
    for (key, val) in dict {
        newDict[key] = val["location"]
    }
    print(newDict)

Выход:

["SKzSjdBuOpO49wkPVaxtmLQoR0O2": "-LB1fn5GQKTaIc-fGNPS", "s0ntSZP7mBQw1a8ua0E5PqazlqJ2": "-LB23izD7bp2NhO0UuIo", "FEScjelpNSR7vuVz1ha6Z6uSfF43": "-LB1JLABuJO1NyJ-v2t_", "mW7dGja6cRRB0d9uSIhg4f35PzC3": "-LB5xqUvIjEgtW_FH_nG", "GCnt0VKcqjT8bl2chw43nsntaZK2": "-LB1n8ga9C0vCcZXD2Us"]

Редактировать

Для вашего случая, так как у вас есть словарь, вы можете попробовать это:

   let dict = ["SKzSjdBuOpO49wkPVaxtmLQoR0O2": [
        "location" : "-LB1fn5GQKTaIc-fGNPS",
        ], "s0ntSZP7mBQw1a8ua0E5PqazlqJ2": [
            "location" : "-LB23izD7bp2NhO0UuIo",
        ], "FEScjelpNSR7vuVz1ha6Z6uSfF43": [
            "location" : "-LB1JLABuJO1NyJ-v2t_",
        ], "mW7dGja6cRRB0d9uSIhg4f35PzC3": [
            "location" : "-LB5xqUvIjEgtW_FH_nG",
        ], "GCnt0VKcqjT8bl2chw43nsntaZK2": [
            "location" : "-LB1n8ga9C0vCcZXD2Us",
        ]] as Dictionary<String, Any>

    var newDict = [String: String]()
    for (key, val) in dict {
        if let value = val as? [String: String] {
            newDict[key] = value["location"]
        }
    }
    print(newDict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...