如何在相同范围SWIFT中查找数组元素的数量

时间:2018-03-14 12:18:18

标签: arrays find range swift4 elements

我很乐意帮助你!

如何在相同范围内找到数组元素的数量? 例如,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
}

但如果只有一个数组属于每个范围,它就能正常工作。那就是我卡住的地方!

1 个答案:

答案 0 :(得分: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的评论那样重新编写它。)