[Kotlin] 범위 활용
📚 범위 활용
📔 함수와 확장함수를 사용해서 배열로 변환
fun toArray(intRange: IntRange): Array<Int> = intRange.toList().toTypedArray() // 범위를 리스트로 변환한 후 배열로 변환
fun IntRange.toArray_(): Array<Int> = this.toList().toTypedArray()
val i = (1..10)
val result = toArray(i)
val i2 = (0..10)
val result2 = i2.toArray_()
println(result2.javaClass.kotlin)
val ls = arrayOf<Int>(*result)
println(ls.javaClass.kotlin)
if (ls.isEmpty()) {
println("원소 없음")
} else {
println(ls.indexOf(0))
println(ls.lastIndexOf(0))
println(ls.count())
println(ls.size)
}
class kotlin.Array
class kotlin.Array
-1
-1
10
10
📔 문자열을 범위로 변환
fun toRange(str: String): IntRange = str.split(":").let { (a, b) ->
a.toInt()..b.toInt()
}
val i = toRange("100:200")
println(i.javaClass.kotlin)
val lst = toArray(i)
println(lst.count())
println(lst.slice(1..5).toIntArray().contentToString())
class kotlin.ranges.IntRange
101
[101, 102, 103, 104, 105]
📔 iterator로 처리해서 while 순환 처리
val list = listOf<Int>(1, 2, 3)
val iterator = list.iterator()
while(iterator.hasNext()) {
println(iterator.next().toString() + ", ")
}
println()
val range = 1..5
val riter = range.iterator()
while(riter.hasNext()) {
println(riter.next().toString() + ", ")
}
println()
fun IntRange.rangeCheck(x: Int) {
when(x) {
in this -> println("$x 는 범위 내에 있음")
}
}
val x = 4
(1..10).rangeCheck(x)
fun ClosedRange<String>.rangeCheck(x: String) {
if (this.contains(x)) println("$x 는 범위 내에 있음")
}
val xy = "mal"
("maa".."mas").rangeCheck(xy)
1,
2,
3,
1,
2,
3,
4,
5,
4 는 범위 내에 있음
mal 는 범위 내에 있음
문자열 범위 처리를 위한 클래스 작성
class StringRange(val start: String, val endInclusive: String) : Iterator<String> {
var next = StringBuilder(start)
val last = endInclusive
override fun hasNext() = (last > next.toString() && last.length >= next.length)
override fun next(): String {
var result = next.toString()
val lastCharacter = next.last()
next.setCharAt(next.length - 1, lastCharacter + 1)
return result
}
}
val a = StringRange("gall", "galp").iterator()
for (i in a) println(i)
val b = StringRange("가", "각").iterator()
for (i in b) println(i)
gall
galm
galn
galo
가