2017-06-06 77 views
1

我有一个数值范围内的值(例如0..100),我想将它翻译成另一个范围(例如到0..9)。因此,结果将是:Kotlin中有没有什么方法可以将一个值从一个范围转换为另一个范围?

50 -> 4100 -> 9,...

是否有任何科特林方法让我在这方面?

+0

我没有得到你的想法,什么51将被转换为? –

+0

@KrisRoofe 51将是4,直到我们到55和55到60之间,结果将是5.我想要将我的范围转移到一个新的范围。 –

+0

新的范围还有100个元素? –

回答

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) 
+0

感谢您的回答,这是正确的,只是想知道在Kotlin API中是否有任何功能,或者我必须这样做。 –

+0

不是我所知道的。你可以把它写成扩展功能 –

+1

我也这么做了,谢谢 –

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

对不起我的坏问题,我只是改善它。 –

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 
相关问题