所以我试图分割一个看起来像这样的字符串:
let Ingredients = "1:egg,4:cheese,2:flour,50:sugar"
我试图获得像这样的字典输出
var decipheredIngredients : [Int:String] = [
1 : "egg",
4 : "cheese",
2 : "flour",
50 : "sugar"
]
以下是我使用
尝试此操作的代码func decipherIngredients(input: String) -> [String:Int]{
let splitStringArray = input.split(separator: ",")
var decipheredIngredients : [String:Int] = [:]
for _ in splitStringArray {
decipheredIngredients.append(splitStringArray.split(separator: ":"))
}
return decipheredIngredients
}
当我尝试这个时,我得到一个错误,说我无法附加到字典中。我尝试过这样的其他方法:
func decipherIngredients(input: String) -> [String.SubSequence]{
let splitStringArray = input.split(separator: ",")
return splitStringArray
}
let newThing = decipherIngredients(input: "1:egg,4:cheese,2:flour,50:sugar").split(separator: ":")
print(newThing)
但是我把它作为函数的输出
[ArraySlice(["1:egg", "4:cheese", "2:flour", "50:sugar"])]
答案 0 :(得分:6)
使用 Swift 4 和函数式编程的替代方法:
let ingredients = "1:egg,4:cheese,2:flour,50:sugar"
let decipheredIngredients = ingredients.split(separator: ",").reduce(into: [Int: String]()) {
let ingredient = $1.split(separator: ":")
if let first = ingredient.first, let key = Int(first), let value = ingredient.last {
$0[key] = String(value)
}
}
print(decipheredIngredients)
答案 1 :(得分:1)
Swift 3
尝试此操作,假设您需要Int类型的字典键和String类型的值
func decipherIngredients(_ input: String) -> [Int:String] {
var decipheredIngredients : [Int:String] = [:]
let keyValueArray = input.components(separatedBy: ",")
for keyValue in keyValueArray {
let components = keyValue.components(separatedBy: ":")
decipheredIngredients[Int(components[0])!] = components[1]
}
return decipheredIngredients
}