我正在学习swift并且遇到问题迭代数组。 这是我正在尝试做的事情:
func orderStringByOccurence(stringArray: [String]) -> [String: Int]{
var stringDictionary: [String: Int] = [:]
for i in 0...stringArray.count {
if stringDictionary[stringArray[i]] == nil {
stringDictionary[stringArray[i]] = 1
stringDictionary
} else {
stringDictionary[stringArray[i]]! += 1
}
}
return stringDictionary
}
在尝试调用此函数之前,我没有收到错误。然后我收到了这个错误:
EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)
我试过调试,发现我在尝试时遇到同样的错误:
for i in 0...arrayFromString.count{
print(arrayFromString[i])
}
那么如何遍历这个数组呢? 感谢您帮助推出新的
答案 0 :(得分:15)
您需要更改
for i in 0...arrayFromString.count
到
for i in 0..<arrayFromString.count
就像现在一样,你遍历数组,然后遍历结束。
你也可以使用不同风格的for循环,这可能会更好一点:
func orderStringByOccurence(stringArray: [String]) -> [String: Int] {
var stringDictionary: [String: Int] = [:]
for string in stringArray {
if stringDictionary[string] == nil {
stringDictionary[string] = 1
} else {
stringDictionary[string]! += 1
}
}
return stringDictionary
}
此外,您可以稍微简化一下逻辑:
for string in stringArray {
stringDictionary[string] = stringDictionary[string] ?? 0 + 1
}
答案 1 :(得分:6)
更多方法:
let array = ["1", "2", "3"]
您可以将forEach
与尾随闭包语法结合使用:
array.forEach { item in
print(item)
}
您可以使用$0
简写:
array.forEach {
print($0)
}
如果您需要索引,可以使用enumerate()
:
array.enumerate().forEach { itemTuple in
print("\(itemTuple.element) is at index \(itemTuple.index)")
}
答案 2 :(得分:2)
好像你没有索引。在我看来,更快捷的方法是不使用计数而是基于范围。
var stringArray = ["1", "2", "3"]
for string in stringArray
{
print(string)
}