본문 바로가기

프로그래밍 언어/Kotlin

[Kotlin] 정렬

1. sort() 와 sorted()

  • sort() 는 Mutable 상태에 사용하는 메서드이다.
  • sorted()는 Immutable 상태에 사용한다.

List는 Immutable 상태이므로 List에 sort()를 사용하면 오류가 발생한다.

반대로 Mutable한 Array에 sorted를 사용하면 문제 없이 정렬이 수행된다.

 

다만, sort()는 기존에 있던 배열 또는 ArrayList에 정렬을 수행시켜주지만

sorted()는 정렬된 배열 또는 리스트를 반환한다.

val array = arrayOf(4, 3, 2, 1)
array.sort()
// array : [1, 2, 3, 4]

val array2 = arrayOf(4, 3, 2, 1)
val newArray2 = array2.sorted()
// array2 : [4, 3, 2, 1]
// newArray2 = [1, 2, 3, 4]

val list = listOf(4, 3, 2, 1)
list.sort()
// Error

val newList = list.sorted()
// list : [4, 3, 2, 1]
// newList = [1, 2, 3, 4]

 

Descending : 내림차순

정렬은 기본적으로 오름차순이다.

하지만 내림차순으로 정렬을 하고 싶다면 sort 또는 sorted 뒤에 Descending을 붙여주면 된다.

val array = arrayOf(1, 3, 4, 2)
array.sortDescending()
// array : [4, 3, 2, 1]

val list = listOf(1, 3, 4, 2)
val newList = list.sortedDescending()
// list : [1, 3, 4, 2]
// newList = [4, 3, 2, 1]

 

 

2. sortBy

sortBy는 특정 조건에 따라 정렬할 때 사용한다.

val list = mutableListOf("a" to 10, "b" to 9, "c" to 8, "d" to 7)
list.sortBy { it.second }
println("list: $list")
// list: ["d" to 7, "c" to 8, "b" to 9, "a" to 10]

val list2 = listOf("aaaa", "a", "aaa", "aa")
val newList2 = list2.sortedBy{ it.length }
print("newList2: $newList2")
// newList2: [a, aa, aaa, aaaa]

 

Immutable 상태는 sorted, 내림차순은 sortByDescending

 

3. sortWith

sortWith는 주어진 Comparator에 지정된 순서에 따라 정렬을 수행한다.

Comparator: 어떠한 규칙을 갖고 있는 비교 함수

 

val list = listOf(3 to 97, 2 to 98, 4 to 99, 1 to 100, 1 to 50, 1 to 30)
val list2 = list.sortedWith(
    compareBy{ it.first }
)
print(list2)
// [(1, 100), (1, 50), (1, 30), (2, 98), (3, 97), (4, 99)]

 

만일 위의 값에서 (1, 100), (1, 50), (1, 30) 또한 second 기준으로 정렬하고 싶다면

val list = listOf(3 to 97, 2 to 98, 4 to 99, 1 to 100, 1 to 50, 1 to 30)
val list2 = list.sortedWith(
    compareBy(
    	{it.first}, {it.second}
    )
)
print(list2)
// [(1, 30), (1, 50), (1, 100), (2, 98), (3, 97), (4, 99)]

다음과 같이 사용하면 된다.

'프로그래밍 언어 > Kotlin' 카테고리의 다른 글

[Kotlin] 배열과 리스트 복사  (0) 2024.03.06
[Kotlin] 문자열 String  (0) 2023.11.03
[Kotlin] 코틀린 기초 문법  (1) 2023.11.03