如何查找同一范围内的数组元素数 SWIFT
How to find number of elements of array in same range SWIFT
有你的帮助我会很高兴!
如何找到同一范围内数组元素的数量?
例如,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
}
但如果每个范围内只有一个数组,则它可以正常工作。这就是我坚持的地方!
我不确定,但这不是你想做的吗?
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 的建议,您可以 re-write 行:rangeDescription[key] = (rangeDescription[key] ?? 0) + 1
为:
rangeDescription[key] = rangeDescription[key, default: 0] + 1
当您想在 Swift 4 中为字典访问提供默认值时,这可能是首选方式。
(我更喜欢使用 contains
而不是 ~=
,但你可以 re-write 它就像 Leo Dabus 的评论一样。)
有你的帮助我会很高兴!
如何找到同一范围内数组元素的数量?
例如,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
}
但如果每个范围内只有一个数组,则它可以正常工作。这就是我坚持的地方!
我不确定,但这不是你想做的吗?
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 的建议,您可以 re-write 行:rangeDescription[key] = (rangeDescription[key] ?? 0) + 1
为:
rangeDescription[key] = rangeDescription[key, default: 0] + 1
当您想在 Swift 4 中为字典访问提供默认值时,这可能是首选方式。
(我更喜欢使用 contains
而不是 ~=
,但你可以 re-write 它就像 Leo Dabus 的评论一样。)