면접에서 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로 만들어서 리턴해줄 수 있다.
'프로그래밍 언어 > 코틀린' 카테고리의 다른 글
Deep Copy(깊은 복사)와 Shallow Copy(얕은 복사) (0) | 2023.04.02 |
---|---|
lateinit과 by lazy의 차이 (0) | 2021.12.28 |
코틀린 25. 오브젝트 (0) | 2021.01.07 |
코틀린 24. 스코프함수 (0) | 2021.01.06 |
코틀린 23. 고차함수, 람다함수 (0) | 2021.01.05 |