오늘은 드디어 시간이 나서 이전에 정리하다가 마치지 못한 Kotlin에서 컬렉션 정렬하는 법에 대해 마저 정리해보았다.
1. Kotlin 컬렉션 정렬하기
1-1. reversed(), asReversed()
reversed() 함수를 컬렉션에 이용하면 순서가 거꾸로된 리스트를 반환받을 수 있다.
fun main() {
val numbers = listOf("하나", "둘", "셋", "넷", "다섯")
val reversedNumbers = numbers.reversed()
println(reversedNumbers) // [다섯, 넷, 셋, 둘, 하나]
}
asReversed()는 리스트에만 적용할 수 있으며 원본 리스트의 인스턴스들의 순서가 거꾸로된 리스트를 반환한다. 원본 리스트와 반환된 리스트는 동일한 인스턴스들을 공유한다. 때문에 원본 리스트가 변환되지 않는다는 확신이 있을 때에는 메모리를 더 효율적으로 사용하기 때문에 좋은 선택이 될 수 있다.
fun main() {
val numbers = listOf("하나", "둘", "셋", "넷", "다섯")
val asReversedNumbers = numbers.asReversed()
println(reversedNumbers) // [다섯, 넷, 셋, 둘, 하나]
}
하지만 원본 리스트가 변환될 수 있는 경우(mutable)에는 같은 인스턴스들을 공유하는 asReversed()를 이용하면 그 역시 변화하기 때문에 결과가 향후 변경되지 않아야한다면 reversed()를 사용해야 한다.
fun main() {
val numbers = mutableListOf("하나", "둘", "셋", "넷", "다섯")
val reversedNumbers = numbers.reversed()
val asReversedNumbers = numbers.asReversed()
println(reversedNumbers) // [다섯, 넷, 셋, 둘, 하나]
println(asReversedNumbers) // [다섯, 넷, 셋, 둘, 하나]
numbers.add("여섯")
println(reversedNumbers) // [다섯, 넷, 셋, 둘, 하나]
// asReversed()를 이용하면 원본 리스트가 변화함에 따라 같이 변화한다
println(asReversedNumbers) // [여섯, 다섯, 넷, 셋, 둘, 하나]
}
1-2. sortwith(), sortedWith(), sortedArrayWith()
비교기를 직접 정의해 정렬하고 싶다면 위의 세 함수를 사용할 수 있다. sortwith()을 사용하면 컬렉션을 정렬하고, sortedWith()을 사용하면 정렬된 리스트를 반환받을 수 있고, sortedArrayWith()을 사용하면 정렬된 배열을 반환받을 수 있다.
fun main() {
val nutrition = arrayOf("단백질", "철", "탄수화물", "칼슘", "콜레스테롤")
val numbers = mutableListOf("3셋3", "4넷2", "2둘4", "1하나5", "5다섯1")
// 요소의 길이를 비교하여 정렬한 배열을 반환
val orderedNutrition = nutrition.sortedArrayWith(compareBy{it.length})
// 요소의 첫 번째 문자를 비교하여 정렬한 리스트를 반환
val orderedNumbers = numbers.sortedWith(compareBy{it.first()})
println(orderedNutrition.contentToString())
// [철, 칼슘, 단백질, 탄수화물, 콜레스테롤]
println(orderedNumbers) // [1하나5, 2둘4, 3셋3, 4넷2, 5다섯1]
// 원본 리스트를 요소의 마지막 문자를 비교하여 정렬함
numbers.sortWith(compareBy{it.last()})
println(numbers) // [5다섯1, 4넷2, 3셋3, 2둘4, 1하나5]
}
1-3. shuffled()
shuffled() 함수를 이용하면 무작위 순서로 된 새로운 리스트를 반환받을 수 있다.
fun main() {
val numbers = mutableListOf("하나", "둘", "셋", "넷", "다섯")
println(numbers.shuffled()) // [둘, 셋, 넷, 다섯, 하나]
}
여기까지 이렇게 컬렉션을 정렬하는 법에 대해 정리해보았다.
2. 오늘 배운 것
- 코틀린에서 컬렉션 정렬하는 법에 대해 정리해보았다.
- 코틀린 문법에 대해 복습해보았다.
'오늘 배운 것' 카테고리의 다른 글
24-04-22 Kotlin 간단한 텍스트 rpg 만들어보기 (2) | 2024.04.22 |
---|---|
24-04-21 Kotlin filter()와 filterNotNull() (0) | 2024.04.21 |
24-04-19 프로젝트 회고 (0) | 2024.04.19 |
24-04-18 소개 페이지 오류 수정하기 (0) | 2024.04.18 |
24-04-17 Firebase에 있는 데이터 삭제하기 (0) | 2024.04.17 |