【问题标题】:Iterate and mutate an Array of Dictionaries Swift 3迭代和变异字典数组 Swift 3
【发布时间】:2017-03-02 16:59:53
【问题描述】:

我在当前的 Swift 文档中引用了这个:

您还可以遍历字典以访问其键值对。当字典被迭代时,字典中的每一项都作为 (key, value) 元组返回,您可以将 (key, value) 元组的成员分解为显式命名的常量,以便在 for-in 循环的主体中使用。在这里,字典的键被分解成一个叫做animalName的常量,字典的值被分解成一个叫做legCount的常量。

让 numberOfLegs = [“蜘蛛”:8,“蚂蚁”:6,“猫”:4]

对于(动物名称, legCount) in numberOfLegs {

print("\(animalName)s have \(legCount) legs") } 

// 蚂蚁有 6 条腿 // 蜘蛛有 8 条腿 // 猫有 4 条腿

但是,当我动态创建字典数组时,该代码不起作用:

let wordArray = ["Man","Child","Woman","Dog","Rat","Goose"]
var arrayOfMutatingDictionaries = [[String:Int]]()

var count = 0

while count < 6
{
    arrayOfMutatingDictionaries.append([wordArray[count]:1])
    count += 1
}

上面的例程成功地创建了字典数组,但是当我尝试像文档显示的那样迭代它时:

for (wordText, wordCounter) in arrayOfMutatingDictionaries

我收到一个错误:表达式类型 [[String:Int]] 在没有更多上下文的情况下不明确

我完全不明白。

这里的目标是拥有一个可变字典的可变数组。在程序的过程中,我想添加新的键值对,但也可以在必要时增加值。我没有与这种集合类型结婚,但我认为它会起作用。

有什么想法吗?

【问题讨论】:

  • arrayOfMutatingDictionaries 是一个 array 而不是字典,因此您将使用 for dict in arrayOfMutatingDictionaries { ... } 进行迭代。 – 不知道你在期待什么。
  • 我期待我已将数组声明为 var,它是可变的,但使用上面的代码模式,这是不可能的。通过for dict in arrayOfMutatingDictionaries 进行迭代,不可能修改字典的值,这是我希望做的。

标签: arrays swift dictionary


【解决方案1】:

您正在尝试遍历一个将其视为字典的数组。 您必须遍历数组,然后遍历您的键/值对

for dictionary in arrayOfMutatingDictionaries{
    for (key,value) in dictionary{
        //Do your stuff
    }
}

添加键/值对非常简单。

for i in 0..< arrayOfMutatingDictionaries.count{
    arrayOfMutatingDictionaries[i][yourkey] = yourvalue
}

您也可以像这样增加现有值

for i in 0..<arrayOfMutatingDictionaries.count{
    for (key,value) in arrayOfMutatingDictionaries[i]{
        arrayOfMutatingDictionaries[i][key] = value+1
    }
}

【讨论】:

    【解决方案2】:
    let wordArray = ["Man","Child","Woman","Dog","Rat","Goose"]
    var arrayOfMutatingDictionaries = [[String : Int]]()
    
    var count = 0
    
    while count < 6 {
        arrayOfMutatingDictionaries.append([wordArray[count] : 1])
        count += 1
    }
    
    for dictionary in arrayOfMutatingDictionaries { // You missed this out!
        for (word, num) in dictionary {
        print(word, num)
        }
    }
    

    【讨论】:

    • 这很有帮助,除非我测试 Goose 的字典 - if word == "Goose" { num += 1 } 然后我得到错误 Left side of mutating operator is not mutable, num is a let 常量。
    【解决方案3】:

    试试这个。你会得到你预期的结果。

    let wordArray = ["Man","Child","Woman","Dog","Rat","Goose"]
    var arrayOfMutatingDictionaries = [String]()  
    //Here you are doing mistake in above line. You are creating an array of  dictionary ([[String:Int]]) in your code. And you are iterating an array of string (wordArray)
    
    var count = 0
    
    while count < 6
    {
         arrayOfMutatingDictionaries.append(wordArray[count])
         count += 1
    }
    
    for (wordText) in arrayOfMutatingDictionaries
    {
         print(wordText)
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 2014-09-12
      • 2015-10-03
      • 2016-11-17
      • 1970-01-01
      • 2017-02-09
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多