首页 文章

迭代并改变一个字典数组Swift 3

提问于
浏览
-1

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

您还可以遍历字典以访问其键值对 . 当迭代字典时,字典中的每个项目都作为(键,值)元组返回,并且您可以将(键,值)元组的成员分解为显式命名的常量,以便在for-in循环的主体内使用 . 这里,字典的键被分解为一个名为animalName的常量,字典的值被分解为一个名为legCount的常量 . let numberOfLegs = [“spider”:8,“ant”:6,“cat”:4] for(animalName,legCount)numberOfLegs {print(“\(animalName)s有\(legCount)leg”)}
// Ant 有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

我收到一个错误: Expression type [[String:Int]] is ambiguous without more context

我根本不明白 .

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

有任何想法吗?

3 回答

  • 3

    您正在尝试迭代数组,将其视为字典 . 您必须遍历数组,然后通过键/值对

    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
        }
    }
    
  • 0
    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)
        }
    }
    
  • 2

    试试这个 . 你会得到你期望的结果 .

    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)
    }
    

相关问题