[Kotlin] 리스트 정렬

Subeen·2023년 11월 23일
0

Kotlin 문법

목록 보기
4/23

정렬 함수에 대해 눈으로만 대충 보고 넘어갔더니 불변형 타입에 sorted가 아닌 sort 함수를 사용하여 에러가 발생한 적이 몇 번 있었다. 더이상 이러한 실수를 반복 하지 않도록 내용을 정리하며 확실하게 짚고 넘어가려 한다.

리스트 정렬

Immutable 리스트 정렬

  • sorted() : 오름차순 정렬
    • 불변형 리스트를 오름차순으로 정렬할 때 사용하며 리스트의 원본을 변경하지 않고 정렬 된 리스트를 생성하여 반환한다.
val list = listOf(55, 20, 10, 5, 45, 15)

val result = list.sorted()  

println("$result")  // [5, 10, 15, 20, 45, 55]
  • reversed() : 역순 정렬
    • 불변형 리스트에 사용되며 역순으로 정렬 된 리스트를 생성하여 반환한다.
val list = listOf(55, 20, 10, 5, 45, 15)

val result = list.reversed()

println("$result")  // [15, 45, 5, 10, 20, 55]
  • sortedDescending() : 내림차순 정렬
    • 불변형 리스트를 내림차순으로 정렬할 때 사용하며 리스트의 원본을 변경하지 않고 정렬 된 리스트를 생성하여 반환한다.
val list = mutableListOf(55, 20, 10, 5, 45, 15)

val result = list.sortedDescending()

println("$resul")  // [55, 45, 20, 15, 10, 5]

mutable 리스트 정렬

mutable 리스트의 경우 (), -ed() 둘 다 사용 가능하다.

  • sort() : 오름차순 정렬
    • 가변형 리스트의 요소들을 오름차순으로 정렬하며 반환 값 없이 원본의 순서를 변경한다.
val list = mutableListOf(55, 20, 10, 5, 45, 15)

list.sort()

println("$list")  // [5, 10, 15, 20, 45, 55]
  • reverse() : 역순 정렬
    • 가변형 리스트에 사용되며 반환 값 없이 컬렉션 자체를 역순으로 정렬한다.
val list = mutableListOf(4, 15, 81, 51, 10)

list.reverse()

println("$list")  // [10, 51, 81, 15, 4]
  • sortDescending() : 내림차순 정렬
    • 가변형 리스트의 요소들을 내림차순으로 정렬하며 반환 값 없이 원본의 순서를 변경한다.
val list = mutableListOf(4, 15, 81, 51, 10)

list.sortDescending()

println("$list")  // [81, 51, 15, 10, 4]

sortedWith(), sortWith()

  • sortedWith()
    • immutable 리스트에서 사용하며 인자로 전달 한 compartor(정렬 규칙)을 반영하여 정렬 된 리스트를 생성하여 반환한다.

문자열 길이로 정렬하며 with() 험수에 정렬 조건을 정의한 compartor를 전달한다.

val list = mutableListOf("apple", "kiwi", "grapes", "avocado")

// 오름차순 정렬
val result1 = list.sortedWith(compareBy { it.length })
println("$result1")  // [kiwi, apple, grapes, avocado]

// 내림차순 정렬
val result2 = list.sortedWith(compareByDescending { it.length })
println("$result2")  // [avocado, grapes, apple, kiwi]
  • sortWith()
    • mutable 리스트에서 사용하며 인자로 전달 한 compartor(정렬 규칙)을 반영하여 원본을 정렬한다.
// 오름차순 정렬
val list1 = mutableListOf("apple", "kiwi", "grapes", "avocado")
list1.sortWith(compareBy { it.length })
println("$list1")  // [kiwi, apple, grapes, avocado]

// 내림차순 정렬
val list2 = mutableListOf("bc", "a", "def", "ghijklmn")
list2.sortWith(compareByDescending { it.length })
println("$list2")  // [ghijklmn, def, bc, a]

sortedBy(), sortBy()

  • 리스트의 요소가 내부에 여러 객체를 갖고 있는 타입일 때 어떤 객체를 비교하여 정렬할지 결정할 때 사용 한다.
  • sortedBy()는 immutable 리스트에서 사용되며 sortBy()는 mutable 리스트에서 사용된다.
val list = mutableListOf("red" to 1, "yellow" to 0, "orange" to 4, "green" to 2)
println("$list")  // [(red, 1), (yellow, 0), (orange, 4), (green, 2)]
        
// 첫 번째 요소로 정렬
list.sortBy { it.first }
println("$list")  // [(green, 2), (orange, 4), (red, 1), (yellow, 0)]

// 두 번째 요소로 정렬
list.sortBy { it.second }
println("$list")  // [(yellow, 0), (red, 1), (green, 2), (orange, 4)]

참조
리스트 정렬 방법

profile
개발 공부 기록 🌱

0개의 댓글