在Swift中将任何字典数组转换为字符串

3

将Swift中的[String:Any]字典数组转换为[String:String]

我有一个<String,Any>类型的字典数组。现在我想要将其转换为字符串,因为我想在textField中显示数据,而文本框无法理解Any数据类型。

我的数据如下:

var myarr = [[String:Any]]()

[
    [
        "Area" : "",
        "Good" : "-",
        "Level" : 2,
        "Link" : "<null>",
        "Photo" : "-",
        "Repair" : "-",
        "Section" : "Others"
    ],

    [
        "Area" : "",
        "Good" : "N",
        "Level" : 2,
        "Link" : "http://google.com",
        "Photo" : 1,
        "Repair" : "Y",
        "Section" : "Grounds"
    ]

]

我希望得到一个新的数组字典:

var myarr = [[String:String]]()

你想将 [[String:Any]] 转换为 [[String:String]] 吗? - Nirav D
是的,我想将String转换为String,但不起作用。 - Harshil Kotecha
你想把 ["test4": true] 转换成什么? - Mike Taverne
@MikeTaverne,请检查我的更新问题。 - Harshil Kotecha
这个对我很有帮助。 - Mohammad Zaid Pathan
3个回答

7

Map是你的好朋友,可以理解为:

let stringDictionaries: [[String: String]] = myarr.map { dictionary in
    var dict: [String: String] = [:]
    dictionary.forEach { (key, value) in dict[key] = "\(value)" }
    return dict
}

2
这个答案是错误的。它在结果中添加了额外的数组层级。 - rmaddy
2
更新也是错误的。 flatmap 在这里没有改变任何东西。请在发布之前验证您的答案。应在 playground 中进行简单的测试。 - rmaddy
2
你的测试无效。请使用一个像问题中的数据一样具有多个键/值对的字典进行测试。 - rmaddy
打印原始数组和结果数组。请注意,结果包含了许多额外的字典。 - rmaddy
@HarshilKotecha 完全不是这样。它与内存无关。结果是为原始字典中找到的每个键/值对创建一个字典。 - rmaddy
显示剩余8条评论

5

以下是一种能够给出正确结果的解决方案:

let myarr = [
    [
        "Area" : "",
        "Good" : "-",
        "Level" : 2,
        "Link" : "<null>",
        "Photo" : "-",
        "Repair" : "-",
        "Section" : "Others"
    ],

    [
        "Area" : "",
        "Good" : "N",
        "Level" : 2,
        "Link" : "http://someurl",
        "Photo" : 1,
        "Repair" : "Y",
        "Section" : "Grounds"
    ]
]


var newarr = [[String:String]]()
for dict in myarr {
    var newdict = [String:String]()
    for (key, value) in dict {
        newdict[key] = "\(value)"
    }
    newarr.append(newdict)
}
print(newarr)

输出:

[["等级": "2", "区域": "", "优秀": "-", "链接": "<null>", "维修": "-", "照片": "-", "部分": "其他"], ["等级": "2", "区域": "", "优秀": "N", "链接": "http://someurl", "维修": "Y", "照片": "1", "部分": "场地"]]


1
您可以使用以下代码创建新字典:
var newArray:[[String: String]] = []
for data in myarr {
    var dict: [String: String] = [:]
    for (key, value) in data {
        let strData = String(describing: value)
        dict[key] = strData
    }
    newArray.append(dict)
}

这段代码产生了错误的结果。只有在每个字典只有一个键值对时才能正常工作。 - rmaddy
我已经编辑了我的代码。现在你可以检查输出结果了。 - Nasser Munshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接