프로그래밍 언어/코틀린

Array.map, Array.reduce, Array.filter (코틀린)

닉네임못짓는사람 2022. 1. 28. 13:09
반응형

면접에서 Array의 map과 reduce가 무엇인지에 대한 질문이 들어왔다.

Array에서 두 함수를 사용해본 적이 없어서 답변을 하지 못해 글로 작성하여 알아보도록 하자.

Array.reduce()


일단 reduce부터 알아보도록 하자.

코틀린 공식 문서에는 reduce함수는 위와 같이 작성되어있다.

reduce함수는 Array의 첫 번째 값부터 시작하여 순서대로 지정한 연산을 수행한 값을 리턴한다.

 

코드를 통해서 사용해보도록 하자.

fun main(){
    var arr = arrayOf(183, 17, 32, 10, 8, 27)
    var res = arr.reduce{x, y -> x + y}
    println(res)
}

위 코드에서 arr이라는 Array에 reduce함수를 사용한다.

연산을 수행하는 두 값을 x와 y로 이름 짓고, x + y연산을 수행하도록 하는 람다식을 인자로 입력한다.

함수를 실행하게되면 좌측이 x, 우측이 y로 ((183 + 17) + 32) + 10 ... 이런 식으로 연산을 수행하게 된다.

fun main(){
    var arr = arrayOf(20, 17, 32, 10, 8, 27)
    var res = arr.reduce{x, y -> getMax(x, y)}
    println(res)
}

fun getBigger(x: Int, y: Int): Int{
    if(x >= y) return x
    else return y
}

위와 같이 함수의 인자로 넣어서 연산을 수행할 수도 있다.

 

Array.map()


map함수는 코틀린 공식문서에 위와 같이 작성되어있다.

map함수는 각 요소마다 연산을 수행하여, 수행한 결과를 List로 만들어 리턴한다.

 

코드를 통해서 알아보도록 하자.

fun main(){
    var arr = arrayOf(20, 17, 32, 10, 8, 27)
    var list = arr.map{it + it}
    println(list)
}

map함수의 인자로 각 요소를 변환할 연산을 넣어주고, 각 요소를 it이라고 명칭 한다.

위 코드에선 it + it, 즉 각 요소를 2배 한 결과를 List로 만들어 리턴한다.

 

마찬가지로 함수를 인자로 주어서 연산을 수행할 수 있다.

fun main(){
    var arr = arrayOf(2, 3, 4, 5, 7)
    var list = arr.map{toNumber(it)}
    println(list)
}

fun toNumber(num: Int): MutableList<Int>{
    val list = mutableListOf<Int>()
    for(i in 1 .. num) list.add(i)
    return list
}

위와 같이 1부터 인자로 들어가는 숫자까지의 모든 숫자를 list로 만들어 리턴하는 함수에

Array에 있는 각 요소를 인자로 넣어줄 수 있다.

 

Array.filter()


reduce, map을 검색해보니 filter함수가 같이 나와서 filter함수에 대해서도 적어보도록 하자.

filter함수는 Kotlin공식 문서에 위와 같이 작성되어있다.

filter함수는 Array내에서 조건에 맞는 요소만을 뽑아서 새로운 List로 만들어서 리턴해주는 함수이다.

fun main(){
    var arr = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
    var list = arr.filter{(it%2) == 0}
    println(list)
}

위와 같이 Array에서 나머지가 0인 숫자, 즉 짝수만을 뽑아서 새로운 List로 만들어서 리턴해줄 수 있다.

 

반응형