arrays - 如何快速遍历数组

标签 arrays 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 (code=EXC_1386_INVOP, subcode=0x0)

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

for i in 0...arrayFromString.count{
    print(arrayFromString[i])
}

那么我该如何遍历这个数组呢? 感谢您帮助创建一个新的

最佳答案

你需要改变

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
}

更新 - 为了完整起见,我想我也应该在这里添加一个 reduce 示例。请注意,从 Swift 5.1 开始,可以隐含单行函数中的 return 语句 ( SE-0255 )。

func orderStringByOccurence(stringArray: [String]) -> [String: Int] {
    stringArray.reduce([:]) { result, string in result.merging([string: 1], uniquingKeysWith: +)}
}

关于arrays - 如何快速遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554278/

相关文章:

arrays - 将值与R中另一个数组中的最近值匹配

ios - 显示 json 序列化错误的用户友好消息

swift - 将类型从类型数组传递到泛型方法

swift - 在两个整数值之间的 Swift 中生成随机值

python - 有效地从现有数组创建新的numpy数组

python - NumPy 数组中负数和正数岛的计数

swift - 使用注册 Controller 将用户添加到 firebase

ios - 您如何以 YYYY-MM-DD 格式快速获取上周日期?

C 矩阵和指针错误

java - 最终 2D 数组数据在不使用 Java 隐式更改其值的情况下进行更改