【发布时间】:2016-03-04 17:41:49
【问题描述】:
作为学习练习,如果String 是 Dictionary 中的现有密钥。我已经知道如何使用.stringByReplacingOccurrencesOfString 执行此操作,但我想了解我在这里做错了什么,以及如何使用 for-in 循环来完成此操作。
let sillyMonkeyString = "A monkey stole my iPhone"
let dictionary = ["monkey": "????", "iPhone":"????"]
var toArray = sillyMonkeyString.componentsSeparatedByString(" ")
// desired result is "A ???? stole my ????"
以下是行不通的:
for var str in toArray {
if let val = dictionary[str] {
str = val
}
}
let backToString = toArray.joinWithSeparator(" ")
有什么作用:
var newArray = [String]()
for var str in toArray {
if let val = dictionary[str] {
str = val
}
newArray.append(str)
}
let backToString = newArray.joinWithSeparator(" ")
这很有效,因为我正在创建一个新数组并附加到新数组。但是,我原来的 Array 是 可变的,那么为什么第一个解决方案没有在 for-in 循环内的原始 Array 中正确地将 str 分配给 val 呢?我发现的唯一其他相关问题here 有一个很好的单行答案,但没有解释我是否可以使用 for-in 循环来完成此操作。
更新:我不建议为这个特定用例实现 for-in 循环。我问这个问题是为了了解如何做到这一点。如果用户想用字典替换部分字符串,我强烈建议考虑使用以下更高效、更快捷的解决方案之一(这可能不是公认的解决方案)
【问题讨论】:
-
既然您是在尝试自学 - 这里有一个额外的挑战:在数组上使用
reduce函数,而不是使用for-in。 -
我也上过 udacity 课程
-
您可以在循环中使用 for(请参阅我的回答),但我建议您使用更“实用”且更快捷的解决方案
标签: arrays string swift for-in-loop