Kotlin zip - List 묶기
Notepad96
·2020. 11. 27. 21:50
1. zip
zip 함수를 사용하면 두 List를 묶어 줄 수 있다.
묶을 때 동일한 Index끼리 묶이므로
Index상 순서가 동일한 서로 연관된 리스트를 더욱 쉽게 사용하기 위하여 묶어줄 수 있을 것이다.
zip 함수는 다음과 같이 2가지 형태가 있다.
public infix fun <T, R> Iterable<T>.zip(other: Iterable<R>): List<Pair<T, R>> {
return zip(other) { t1, t2 -> t1 to t2 }
}
public inline fun <T, R, V> Iterable<T>.zip(other: Iterable<R>, transform: (a: T, b: R) -> V): List<V> {
...
}
또한, zip으로 size가 서로 다른 두 리스트를 묶을 경우
size가 더 적은 리스트만큼의 결과를 얻을 수 있다.
2. 코 드
환경 : Kotlin Version = 1.4.20, JVM
fun main(args: Array<String>) {
println("===================LIST=======================")
val ml = mutableListOf(5, 4, 1, 2, 3, 6)
val ml2 = mutableListOf("a", "c", "b", "e", "d", "f")
println("1. List : $ml")
println("2. List : $ml2")
val ml3 = ml.zip(ml2) {a, b -> b+a}
println("3. List : $ml3")
val ml4 = ml zip ml2
if(ml4 is List<Pair<Int, String>>) println("타입 체크")
ml4.forEach { print("${it.first}:${it.second} ") }
println()
println("===================SET=======================")
val ms = mutableSetOf(2, 4, 3)
println("1. Set : $ms")
val ms2 = ms.zip(ml) { a, b -> a+b}
// val ms2 = ml.zip(ms) { a, b -> a+b} // 동일한 결과
println("2. List : $ms2")
}
- ml.zip(ml2)
List에 포함되어 있는 zip 함수를 사용하여 ml과 ml2를 묶어주고 있다.
이와 같은 방법은 리스트를 직접 묶기보다는 두 리스트의 값을 이용하여 새로운 값을 만들어내고자 할 때 사용할 수 있다.
- ml zip ml2
반환 타입은 List<Pair<T, T>> 로서 위 zip과는 다르게 두 리스트의 값을 온전히 묶어서 관리하고 할 때 사용할 수 있다.
Pair 타입이므로 first와 second를 사용하여 각각 접근할 수 있다.
- size가 3인 ms와
size가 6인 ml을 zip한 결과 size 3이 더 적으므로
size 3만큼 List와 Set의 각 원소를 합한 리스트를 결과로 얻었다.
3. 참 조
'Kotlin > Collections' 카테고리의 다른 글
Kotlin getOrElse - 잘못된 접근으로 발생하는 에러 제거 (0) | 2020.11.28 |
---|---|
Kotlin joinToString - List 문자열 변환 List to String (0) | 2020.11.28 |
Kotlin flatMap - 원소 값 변경 및 추가 (0) | 2020.11.27 |
Kotlin partition - 조건에 따라 2개로 분리하기 (0) | 2020.11.26 |
Kotlin count - 조건에 만족하는 원소 개수 (0) | 2020.11.26 |