如何将字符串拆分为整数:字符串字典

3

我正在尝试拆分一个类似于这样的字符串:

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"])]

1
它们真的是键吗?还是只是它们的成分数量?如果它们是数量,你应该使用元组数组。如果数量没有意义,我认为你应该丢弃它们并创建一个带有成分的普通数组。 - Leo Dabus
1
@LeoDabus 你说得对,我应该更深入地了解什么是字典,因为我以为它只是将两种数据类型链接成一个数组的方法。谢谢! - Walker Sorensen
2个回答

9

使用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)

2

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

}

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