如何在swift中迭代数组

use*_*756 9 arrays swift

我正在学习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
}
Run Code Online (Sandbox Code Playgroud)

在我尝试调用此函数之前,我没有收到错误.然后我收到这个错误:

EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)

我试过调试,发现我尝试这个时遇到同样的错误:

for i in 0...arrayFromString.count{
    print(arrayFromString[i])
}
Run Code Online (Sandbox Code Playgroud)

那么如何遍历这个数组呢?谢谢你帮忙换新的

Cha*_* A. 17

你需要改变

for i in 0...arrayFromString.count
Run Code Online (Sandbox Code Playgroud)

for i in 0..<arrayFromString.count
Run Code Online (Sandbox Code Playgroud)

就像现在一样,你遍历数组,然后遍历结束.

你也可以使用不同风格的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
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以稍微简化您的逻辑:

for string in stringArray {
    stringDictionary[string] = stringDictionary[string] ?? 0 + 1
}
Run Code Online (Sandbox Code Playgroud)


Aar*_*ger 9

还有一些方法:

let array = ["1", "2", "3"]
Run Code Online (Sandbox Code Playgroud)

您可以使用forEach尾随闭包语法:

array.forEach { item in
    print(item)
}
Run Code Online (Sandbox Code Playgroud)

你可以使用$0速记:

array.forEach {
    print($0)
}
Run Code Online (Sandbox Code Playgroud)

如果您需要索引,可以使用enumerate():

array.enumerate().forEach { itemTuple in
    print("\(itemTuple.element) is at index \(itemTuple.index)")
}
Run Code Online (Sandbox Code Playgroud)


GOR*_*GOR 7

看来你的索引已经用完了。在我看来,一种更快速的方法是不使用计数,而是基于范围进行。

var stringArray = ["1", "2", "3"]
for string in stringArray
{
    print(string)
}
Run Code Online (Sandbox Code Playgroud)