在Kotlin中是否有任何方法允许我将范围中的值转换为另一个范围?

时间:2017-06-06 09:34:45

标签: range kotlin

我在一系列数字(例如0..100)中有一个值,我希望将其转换为另一个范围(例如0..9)。结果将是:

50 -> 4100 -> 9,...

Kotlin有什么方法可以帮助我吗?

4 个答案:

答案 0 :(得分:1)

val r2 = IntRange(0, 100).filter { it %10 ==0 }.map { it /10 }

答案 1 :(得分:1)

计算原始范围内的数字比率。 将它乘以第二个范围。

fun convert(number: Int, original: IntRange, target: IntRange): Int {
    val ratio = number.toFloat() / (original.endInclusive - original.start)
    return (ratio * (target.endInclusive - target.start)).toInt()
}

作为扩展功能

fun IntRange.convert(number: Int, target: IntRange): Int {
    val ratio = number.toFloat() / (endInclusive - start)
    return (ratio * (target.endInclusive - target.start)).toInt()
}

val result =  (0..100).convert(50, 0..9)

答案 2 :(得分:0)

我认为这应该有用,

val original = 0..100
val new = original.step((original.endInclusive - original.start) / 9).map{it /10}.forEach{ println(it)}

输出,

0
1
2
3
4
5
6
7
8
9

答案 3 :(得分:0)

如果您的新范围不是从零开始,请添加第一个元素,如下所示

fun mapRange(number: Int, prevRange: IntRange, newRange: IntRange) : Int {
    val ratio = number.toFloat() / (prevRange.last - prevRange.first)
    return (ratio * (newRange.last - newRange.first) + newRange.first).toInt()
}