Open dkdud9261 opened 1 month ago
fun <T> Iterable<out T>.joinToString(
separator: CharSequence = ", ",
prefix: CharSequence = "",
postfix: CharSequence = "",
limit: Int = -1,
truncated: CharSequence = "...",
transform: ((T) -> CharSequence? = null
): String
각 원소를 seperator
로 연결하여 하나의 문자열을 만든다.
val numbers = listOf(1, 2, 3, 4, 5, 6)
println(numbers.joinToString()) // 1, 2, 3, 4, 5, 6
println(numbers.joinToString(prefix = "[", postfix = "]")) // [1, 2, 3, 4, 5, 6]
println(numbers.joinToString(prefix = "<", postfix = ">", separator = "•")) // <1•2•3•4•5•6>
val chars = charArrayOf('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q')
println(chars.joinToString(limit = 5, truncated = "...!") { it.uppercaseChar().toString() }) // A, B, C, D, E, ...!
infix fun <T, R> Iterable<T>.zip(
other: Iterable<R>
): List<Pair<T, R>>
val listA = listOf("a", "b", "c")
val listB = listOf(1, 2, 3, 4)
println(listA zip listB) // [(a, 1), (b, 2), (c, 3)]
inline fun <T, R, V> Iterable<T>.zip(
other: Iterable<R>,
transform: (a: T, b: R) -> V
): List<V>
val listA = listOf("a", "b", "c")
val listB = listOf(1, 2, 3, 4)
val result = listA.zip(listB) { a, b -> "$a$b" }
println(result) // [a1, b2, c3]
요런 표준 라이브러리는 보통 Iterable
, Array
... 등에 다 있다.
infix fun Int.downTo(to: Int): IntProgression
this에서 to까지 -1 되는 시퀀스를 반환한다.
delta를 지정할 수 있고, Int, Long, Byte, Short ... 에서 가능하다.
XProgression
은 Iterable
을 상속한다.
('e' downTo 'a' step 2).forEach { println(it) }
/*
e
c
a
*/
inline fun <T, R> Iterable<T>.fold(
initial: R,
operation: (acc: R, T) -> R
): R
초기값에서 각 원소들에 대해 operation
으로 누적한 값을 반환한다.
val result = listOf(1, 2, 3, 4, 5).fold(0) { acc, num -> acc + num }
println(result) // 15
indices
문자 시퀀스에 대해 유효한 문자 인덱스 range를 반환한다.
usage
문자열의 각 문자를 인덱스로 탐색할 때
Iterable
함수랑 연계해서 사용하면 유용하다.