2017-06-06 124 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 
相關問題