📚 범위 활용


📔 함수와 확장함수를 사용해서 배열로 변환

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
가