我正在尝试从字典中返回一串选定值。当我遍历字典和要从中获取键的数组时,可以打印出值,但可以打印为不同的字符串,而不是组合在一起。
到目前为止,我已经遍历了集合类型,并尝试了映射,过滤和缩小。还尝试将结果放入数组和字典中以使用.joined,但我一直都无用。
这是我从中获取值的字典:
let letterDict = ["a": "1", "b": "2", "c": "3", "d": "4"]
这是我要查询的数组:
let characterArray = ["a", "b"]
这是我能够从中获取结果的代码:
func convertText(_ input: String) -> String {
var expectedText: String?
for character in characterArray {
for (key, value) in letterDict {
if key.contains(character) {
print(value)
expectedText = value
}
}
}
return expectedText ?? input
}
我正试图返回12
,但得到的是:
1
2
一直。即使我尝试将它们映射到数组,它也只会返回单独的数组(或字典)。当我尝试追加到数组时,它只会返回nil。
谢谢。
答案 0 :(得分:1)
您需要将value
附加到expectedText
而不是分配它。
func convertText(_ input: String) -> String {
var expectedText = ""
for character in characterArray {
for (key, value) in letterDict {
if key.contains(character) {
expectedText += value
}
}
}
return expectedText.isEmpty ? input : expectedText
}
答案 1 :(得分:1)
这是使用compactMap
和[Character : Character]
字典的另一种方式:
let letterDict: [Character : Character] = ["a": "1", "b": "2", "c": "3", "d": "4"]
let str = "ab"
var newstr = String(str.compactMap { letterDict[$0] })
print(newstr) // 12
如果没有匹配的字符,它将返回空字符串""
,而您的代码返回了原始字符串。如果这是理想的结果,则可以执行以下操作:
newstr = newstr.isEmpty ? str : newstr
因此您的功能变为:
func convertText(_ input: String) -> String {
let expectedText = String(input.compactMap { letterDict[$0] })
return expectedText.isEmpty ? input : expectedText
}
print(convertText("ab")) // 12
print(convertText("ef")) // ef