알아두면 유용한 함수들을 정리해 보려 한다.
maxBy, minBy - 배열에서 가장 큰 수와 작은 수를 구할때 사용
fun main() {
val arrInt = IntArray(10) {0}
for(i in 0 until arrInt.count() step 1){
val random:Random = Random()
arrInt[i] = random.nextInt(100)+1
}
println(arrInt.contentToString())
// val maxNum:Int? = arrInt.maxBy{it}
val maxNum:Int = arrInt.maxBy{it} ?: -1
val minNum:Int = arrInt.minBy{it} ?: -1
println("arrInt에서 가장 큰 수는 ${maxNum}, 가장 작은 수는 ${minNum} 입니다.")
}
- val arrInt = IntArray(10) {0} => 배열 arrInt를 10크기만큼 0으로 초기화
- for loop => 배열에 랜덤으로 1부터 100까지의 숫자를 넣음
- maxBy{it}, minBy{it}을 사용해 배열에서 가장 큰 수, 작은 수를 찾아 각 각의 변수에 입력
- 각 각의 변수에 null 값이 들어갈 수 있으므로 ?: 엘비스 연산 또는 타입 뒤에?를 입력하여 null pointer 에러를 방지
groupBy - 하나의 속성으로 다른 속성들을 그룹으로 만들어 줄 때 사용, map -
data class Person(val name: String, val age: Int, val gender: String)
fun main() {
val personList = arrayListOf<Person>(
Person("Jenny", 24, "female"), Person("Matthew", 55, "male"),
Person("Jessica", 31, "female"), Person("Jon", 30, "male"),
Person("cyndi", 40, "female"), Person("Sam", 36, "male"),
Person("Paul", 22, "male")
)
val genderGroup: Map<String, List<Person>> = personList.groupBy { it.gender }
println(genderGroup)
val groupValue:Collection<List<Person>> = genderGroup.values
println(groupValue)
val mapGroup:List<Int> = genderGroup.values.map { it.size }
println(mapGroup)
}
- data class Person(val name: String, val age: Int, val gender: String) => data class Person을 생성
- personList를 생성
- val genderGroup: Map<String, List<Person>> = personList.groupBy { it.gender }
- genderGroup 변수에 gender로 그루핑된 Map을 반환 Map의 Value 값은 List<Person> 값이다.
- val groupValue:Collection<List<Person>> = genderGroup.values => Collection으로 치환해 주기 위해 genderGroup.values를 사용
- 5. val mapGroup:List<Int> = genderGroup.values.map { it.size } => groupValue 값으로 각 리스트들의 사이즈를 구해서 리스트로 반환
reduce - 배열안에 수를 순차적으로 연산할때 사용
fun main(){
val arr:ArrayList<Int> = arrayListOf(1,4,2,3)
var result:Int
result = arr.reduce{total, element -> element * total} // reduce(Int::times)와 같다
println(result)
result = arr.reduce(Int::minus)
println(result)
}
reduce는 소괄호()를 이용한 방법과 중괄호{}를 이용한 두 가지 방법으로 사용할 수 있다.
3-1. () 소괄호 이용
형식: arr.reduce(type::operator)
operator | 기능 | 예시 | 결과 |
plus | 더하기 | println(arr.reduce(Int::plus)) | 10 |
minus | 빼기 | println(arr.reduce(Int::minus)) | -8 |
times | 곱하기 | println(arr.reduce(Int::times)) | 24 |
div | 나누기 | println(arr.reduce(Int::div)) | 0 |
rem | 나머지 | println(arr.reduce(Int::rem)) | 1 |
배열 안에 있는 모든 수를 인덱스 순서대로 계산해 준다.
ex) plus => 1 + 4 + 2 + 3 == 10
minus => 1 - 4 - 2 - 3 == -8
times => 1 * 4 * 2 * 3 == 24
div => 1 / 4 / 2 / 3 == 0
rem => 1 % 4 % 2 % 3 == 1
3-2. {}중괄호 이용
형식: arr.reduce{total, element -> element operator total}
중괄호 안에 "total, element -> element + total"은 total += element와 같다고 보면 된다. total은 값이 계속 저장될 변수, element는 배열에 들어 있는 수를 순차적으로 불러올 때 사용하는 변수다. 이 변수의 이름은 정해져 있는 것이 아니기에 자유롭게 정해도 상관없다. 다만 operator에 따라 연산이 달라지기 때문에 적절한 연산자를 넣어줘야 한다.
ex) ArrayList. reduce{total, element -> element + total} == ArrayList.reduce(Int::plus)
indices - 배열의 인덱스 값을 가져올 때 사용
val arr = arrayListOf(1,4,2,3) 이 존재
fun main(){
val arr:ArrayList<Int> = arrayListOf(1,4,2,3)
val max = arr.max()
val min = arr.min()
println(arr.indices) // 0..3이 출력됨
println("배열에서 가장 큰 수는 ${max}이고 ${arr.indices.find { i -> arr[i] == max }}인덱스 값이다.")
println("배열에서 가장 작은 수는 ${min}이고 ${arr.indices.find { i -> arr[i] == min }}인덱스 값이다.")
}
indices와 find결합해서 사용하면 배열에서 가장 큰 수와 작은 수의 "위치"를 쉽게 찾을 수 있다.
compareTo()
fun main() {
// str1.compareTo("str2") 에서 str1 > str2 인 경우 알파벳 순서를 기준으로 str1 - str2의 결과 값인 Int 타입의 변수가 나온다.
// str1이 더 큰 경우
println("b".compareTo("a")) // b가 a보다 1 더 크다
println("c".compareTo("a")) // c가 a보다 2 더 크다
println("d".compareTo("a")) // d가 a보다 3 더 크다
// str1이 더 작은 경우
println("a".compareTo("e")) // a가 e보다 4 더 작다
println("a".compareTo("f")) // a가 f보다 5 더 작다
println("a".compareTo("g")) // a가 g보다 6 더 작다
// str1이 같은 경우
println("a".compareTo("a")) // a는 a와 같다
}
// ===========결과 값===========
// 1
// 2
// 3
// -4
// -5
// -6
// 0
compareTo()는 String값 끼리 비교할 때 사용하면 좋다. 특히 리스트를 이름 순으로 정렬할 때 사용하면 편하게 정렬할 수 있다.
'개발' 카테고리의 다른 글
Linux Ubuntu에서 GitHub에서 다운 받은 LogFilter 사용하기 (2) | 2024.12.09 |
---|---|
compareTo() 정리(Int) - Kotlin (2) (0) | 2021.03.12 |
compareTo() 정리(String) - Kotlin (1) (2) | 2021.03.12 |
String 관련 함수 정리 (0) | 2021.03.05 |