Ios 如何正确地执行For循环

Ios 如何正确地执行For循环,ios,swift,algorithm,swift4,programming-languages,Ios,Swift,Algorithm,Swift4,Programming Languages,我想在我的数组中每隔3个位置添加5个 var myList: [String] = ["U.S", "Spain", "China", "Brazil", "India" , "Canada", "Germany", "UK", "Dubai", "Russia", "Japan", "Italy", "France", "Australia", "Thailand", "Mexico"] var i = 0 for name in 0...myList.count { i = i +

我想在我的数组中每隔3个位置添加5个

var myList: [String] = ["U.S", "Spain", "China", "Brazil", "India" , "Canada", "Germany", "UK", "Dubai", "Russia", "Japan", "Italy", "France", "Australia", "Thailand", "Mexico"]

var i = 0
for name in 0...myList.count {
    i = i + 1
    if  i % 3 == 0 {
        myList.insert("\(5)", at: i )
    }
}
print("\(myList)")
输出为:

["U.S", "Spain", "China", "5", "Brazil", "India", "5", "Canada", "Germany", "5", "UK", "Dubai", "5", "Russia", "Japan", "5", "Italy", "France", "Australia", "Thailand", "Mexico"]

但是在数组中16个位置之后,我无法将所有5个都放入数组中,因为myList中的数组总共有16个计数……因此,我如何才能将5个正确放入数组中呢?问题是,您正在对数组进行变异,并在迭代时更改其元素,因此,您实际上需要做的是以相反的顺序插入元素。试着这样做:

var myList = ["U.S", "Spain", "China", "Brazil", "India", "Canada", "Germany", "UK", "Dubai", "Russia", "Japan", "Italy", "France", "Australia", "Thailand", "Mexico" ]

for index in myList.indices.dropFirst().reversed() where index % 3 == 0 {
    myList.insert("5", at: index)
}

print(myList)   // "["U.S", "Spain", "China", "5", "Brazil", "India", "Canada", "5", "Germany", "UK", "Dubai", "5", "Russia", "Japan", "Italy", "5", "France", "Australia", "Thailand", "5", "Mexico"]\n"

这里的问题是,在迭代数组时,您正在改变数组的元素,所以您实际上需要做的是以相反的顺序插入元素。试着这样做:

var myList = ["U.S", "Spain", "China", "Brazil", "India", "Canada", "Germany", "UK", "Dubai", "Russia", "Japan", "Italy", "France", "Australia", "Thailand", "Mexico" ]

for index in myList.indices.dropFirst().reversed() where index % 3 == 0 {
    myList.insert("5", at: index)
}

print(myList)   // "["U.S", "Spain", "China", "5", "Brazil", "India", "Canada", "5", "Germany", "UK", "Dubai", "5", "Russia", "Japan", "Italy", "5", "France", "Australia", "Thailand", "5", "Mexico"]\n"

0…myList.count这将崩溃,因为对于大小为myList.count的数组,最后一个有效索引是myList.count-1,而不是myList.count,因为您正在尝试访问这里。另外,如果您需要迭代数组并访问索引和元素,请使用offset,element in array.enumerated{…}。有关详细信息,请参阅我的博客文章:另外,您可以使用i.isMultipleof:3更清楚地表达与i%3==0相同的内容。是的。顺便问一下,你到底想用这个做什么?很奇怪,为什么数字和国家在同一个数组中?这只是一个玩具示例吗?实际上我正在为自己的实践做一个项目…我是swift新手,你可以说我是一个noob…所以我的挑战是在表视图的每3或4个位置放置一个Advertised in TableView单元格…所以我要做的是如果数组[indexpath.row]的值.valueNO==5..然后我将返回广告单元格..我知道这不是像你这样的专家的最佳做法..但只是为了练习目的,我在做这个..bcoz我是新来的n想通过练习来学习n尝试新事物..n顺便说一句,我给出国家和数字示例的原因是因为我想用一种简单的方式问问题,实际上,这似乎是一种很好的练习,但如果你使用原始数组来存储所有这些,它会变得相当复杂。我建议您制定一个TableRowDataSource协议和两个结构:CountryRowData和AdvertisementRow,它们都符合该协议。CountryRowData存储国家名称和任何其他与国家相关的内容标志、人口等,AdvertisementRow存储驱动广告所需的任何数据。0…myList.count这将崩溃,因为对于大小为myList.count的数组,最后一个有效索引是myList.count-1,而不是myList.count,当你试图进入这里时。另外,如果您需要迭代数组并访问索引和元素,请使用offset,element in array.enumerated{…}。有关详细信息,请参阅我的博客文章:另外,您可以使用i.isMultipleof:3更清楚地表达与i%3==0相同的内容。是的。顺便问一下,你到底想用这个做什么?很奇怪,为什么数字和国家在同一个数组中?这只是一个玩具示例吗?实际上我正在为自己的实践做一个项目…我是swift新手,你可以说我是一个noob…所以我的挑战是在表视图的每3或4个位置放置一个Advertised in TableView单元格…所以我要做的是如果数组[indexpath.row]的值.valueNO==5..然后我将返回广告单元格..我知道这不是像你这样的专家的最佳做法..但只是为了练习目的,我在做这个..bcoz我是新来的n想通过练习来学习n尝试新事物..n顺便说一句,我给出国家和数字示例的原因是因为我想用一种简单的方式问问题,实际上,这似乎是一种很好的练习,但如果你使用原始数组来存储所有这些,它会变得相当复杂。我建议您制定一个TableRowDataSource协议和两个结构:CountryRowData和AdvertisementRow,它们都符合该协议。CountryRowData存储国家名称,以及任何其他与国家相关的内容国旗、人口等,AdvertisementRow存储驱动广告所需的任何数据。@yuvi1234我的大部分知识来自于与SO的其他用户的互动。您只需要开始尝试回答尽可能多的问题,这将允许您收到大量关于代码的反馈,这将有助于您改进代码。@yuvi1234我的大部分知识来自于与SO的其他用户的交互。您只需要开始尝试回答尽可能多的问题,这将允许您收到关于代码的大量反馈,这将帮助您改进代码。