我在一系列数字(例如0..100
)中有一个值,我希望将其转换为另一个范围(例如0..9
)。结果将是:
50 -> 4
或100 -> 9
,...
Kotlin有什么方法可以帮助我吗?
答案 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()
}