【问题标题】:How to find number of elements of array in same range SWIFT如何在同一范围SWIFT中查找数组元素的数量
【发布时间】:2018-03-14 12:18:17
【问题描述】:

你的帮助我会很高兴的!

如何在同一范围内找到数组元素的数量? 例如,var arrayOfInt = [1, 4, 9, 19, 38, 41] 包含范围 1...9 的 3 个元素、范围 10...19 的 1 个元素、范围 30...39 和 40...49 的 1 个和 1 个。

我需要计算每个范围内的元素数量(1...9、10...19、20...29 等)。我想使用带有范围集描述的常量字典,但到最后不明白如何解决该任务。

这是我得到的:

func finDRange(line: [Int]) -> [String: Int] {
        let sourceRange = ["R0": 1...9, "R1": 10...19, "R2": 20...29, "R3": 30...39, "R4": 40...49]
        var rangeDescription: [String: Int] = ["R0": 0, "R1": 0, "R2": 0, "R3": 0, "R4": 0]
        var count = 0
        for number in line {
        for (key, range) in sourceRange {
            if range.contains(number) {
                rangeDescription.updateValue(+1, forKey: key)
            }
            }
   }
        return rangeDescription
}

但如果每个范围内只有一个数组,它就可以正常工作。这就是我卡住的地方!

【问题讨论】:

    标签: arrays find range swift4 elements


    【解决方案1】:

    我不能确定,但​​这不是你想要做的吗?

    func findRange(line: [Int]) -> [String: Int] {
        let sourceRange = ["R0": 1...9, "R1": 10...19, "R2": 20...29, "R3": 30...39, "R4": 40...49]
        var rangeDescription: [String: Int] = ["R0": 0, "R1": 0, "R2": 0, "R3": 0, "R4": 0]
        for number in line {
            for (key, range) in sourceRange {
                if range.contains(number) {
                    rangeDescription[key] = (rangeDescription[key] ?? 0) + 1 //<- add 1 to the entry for the range
                    break
                }
            }
        }
        return rangeDescription
    }
    var arrayOfInt = [1, 4, 9, 19, 38, 41]
    
    
    let result = findRange(line: arrayOfInt)
    print(result) //->["R0": 3, "R1": 1, "R2": 0, "R4": 1, "R3": 1]
    

    按照 Leo Dabus 的建议,您可以将以下行:rangeDescription[key] = (rangeDescription[key] ?? 0) + 1 重写为:

    rangeDescription[key] = rangeDescription[key, default: 0] + 1
    

    当您想在 Swift 4 中为字典访问提供默认值时,这可能是首选方式。

    (我更喜欢使用contains而不是~=,但您可以按照Leo Dabus的评论重新编写它。)

    【讨论】:

    • @George,这是nil coalescing operator。在 Swift 中,Dictionary 的下标 ([]) 的结果是可选的,因此 ?? 可用于为 nil 情况提供 默认值。当rangeDescription[key] 为nil 时,rangeDescription[key] ?? 0 的值得到0。你可以在上面的代码中使用rangeDescription[key]!,但是`?? 0` 在很多情况下会更好。
    • 您可以使用带有默认值的 Swift 4 Dictionary 基于键的下标。 rangeDescription[key, default: 0] += 1。我也会使用模式匹配运算符而不是 contains if range ~= number {
    • 感谢您提供如此详尽的解释!
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多