Kotlin zip - List 묶기

Notepad96

·

2020. 11. 27. 21:50

300x250

 

 

 

 


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를 사용하여 각각 접근할 수 있다.

 

 

 

Kotlin 변수 묶기 Pair, Triple

1. 2개의 변수 묶기 - Pair data class Pair (val first: A, val second: B) Pair 클래스는 다음과 같이 정의되어 있다. Pair 클래스는 data class로서 2개의 변수를 묶어 사용하기 유용하다. fun main()..

notepad96.tistory.com

 

 

 

 

- size가 3인 ms와

 

size가 6인 ml을 zip한 결과 size 3이 더 적으므로

 

size 3만큼 List와 Set의 각 원소를 합한 리스트를 결과로 얻었다.

 

 

 

 

 

 


3. 참 조

 

 

zip - Kotlin Programming Language

 

kotlinlang.org

 

 

300x250