[英]Iterate and mutate an Array of Dictionaries Swift 3
我在当前的Swift文档中引用了这一点:
您还可以遍历字典以访问其键值对。 迭代字典时,字典中的每个项目都将作为(键,值)元组返回,并且您可以将(键,值)元组的成员分解为明确命名的常量,以便在for-in循环的主体中使用。 在这里,字典的键被分解为一个名为animalName的常量,而字典的值被分解为一个称为legCount的常量。
让numberOfLegs = [“ spider”:8,“ ant”:6,“ cat”:4]
在numberOfLegs中用于(animalName,legCount){
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]]含糊不清,没有更多上下文
我一点都不明白。
这里的目标是拥有可变字典的可变数组。 在编程过程中,我想添加新的键值对,但也可以在必要时增加值。 我并没有嫁给这种收藏类型,但我认为它会起作用。
有任何想法吗?
您正在尝试遍历数组,将其视为字典。 您必须遍历数组,然后遍历键/值对
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
}
}
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)
}
}
尝试这个。 然后您将获得预期的结果。
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)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.