将数字与范围数字进行比较并了解该数字适合 Swift 的范围的最佳方法是什么

What would be the best way to compare a number with a range-number and know in what range did the number fit in Swift

我想做的是能够将一个数字与一系列数字进行比较,这里我使用的是数组字典,因为这是我唯一能想到的,但它可以是任何东西。

理论上这就是我想要的伪代码...

myNumber

rangeOne
rangeTwo
rangeThree

Does myNumber fit in any of the range numbers? If yes in which one?

这是我一直在玩的东西,它告诉我它是否适合,但它没有告诉我它适合的范围。

var myNumber = 72

let rangeNumbers = [
    "rangeOne": [72,104],
    "rangeTwo": [60,88],
    "rangeThree": [80,150],
]


for (rangeName, range) in rangeNumbers {

    for number in range {

        if myNumber <= number {
            print(number)
            print(rangeName)
            print("It's smaller/equal than \(myNumber)")
            print("-------------------------")
            break
        }else{
            print(number)
            print(rangeName)
            print("It's bigger than \(myNumber)")
            print("-------------------------")
            break
        }
    }
} 

将数字与范围数字进行比较并了解数字适合的范围的最佳方法是什么?

谢谢

我宁愿做这样的事情:

for (rangeName, range) in rangeNumbers {

    if range.count > 1
    {
        if myNumber >= range.first! && myNumber <= range.last! {
            print(rangeName)
        }
    }
}

如果您的范围数组只包含最小值和最大值这两个元素,这将有效。

但更好的方法是使用 Range。

改用范围..

let range: Range<Int> = Range(start: 1,end: 100)
range.contains(10) // true

...在你的例子中

var myNumber = 72

let rangeNumbers = [
    "rangeOne": [72,104],
    "rangeTwo": [60,88],
    "rangeThree": [80,150],
]


let result = rangeNumbers.flatMap { (d) -> String? in
    let range: Range<Int> = Range(start: d.1[0],end: d.1[1] + 1)
    return range.contains(myNumber) ? d.0 : nil
    }
print(result)         // ["rangeOne", "rangeTwo"]

myNumber = 720

let result2 = rangeNumbers.flatMap { (d) -> String? in
    let range: Range<Int> = Range(start: d.1[0],end: d.1[1] + 1)
    return range.contains(myNumber) ? d.0 : nil
    }
print(result2)         // []

为了安全,先查字典..

是时候在 swift 找点乐子了,这是一个班轮:

let rangeIndex = rangeNumbers.indexOf{ [=10=].1.first <= myNumber && [=10=].1.last >= myNumber }

然后你可以像这样使用它:

print(rangeNumbers[rangeIndex!])