将数字与范围数进行比较的最佳方法是什么,并且知道数字在Swift

时间:2015-11-16 15:02:28

标签: arrays swift dictionary range

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

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

  

mynumber的

     

为RangeOne
  为RangeTwo
  rangeThree

     

myNumber是否适合任何范围数字?如果是哪一个?

以下是我一直在玩的是哪种方式告诉我它是否适合但它并没有告诉我它适合的范围。

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
        }
    }
} 

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

由于

3 个答案:

答案 0 :(得分:1)

我宁愿做那样的事情:

for (rangeName, range) in rangeNumbers {

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

如果你的范围数组只包含两个元素min和max。

,那将会有效

但更好的方法是使用Range。

答案 1 :(得分:1)

使用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)         // []

为了安全起见,首先查看你的词典..

答案 2 :(得分:1)

快速享受一些乐趣的时间,这是一个班轮:

let rangeIndex = rangeNumbers.indexOf{ $0.1.first <= myNumber && $0.1.last >= myNumber }

然后你就可以使用它:

print(rangeNumbers[rangeIndex!])