Kotlin - sortedBy

Jiyoon Chaeยท2025๋…„ 2์›” 7์ผ

Kotlin

๋ชฉ๋ก ๋ณด๊ธฐ
5/5

๐Ÿ’Ÿ ์ด์Šˆ ๋‚ด์šฉ

  • Ui ๊ตฌํ˜„ํ•˜๋Š”๋ฐ, api๋กœ ์ˆœ์œ„๊ฐ€ 1,2,3 ์ˆœ์œผ๋กœ ๋‚ด๋ ค์˜ค๋Š”๋ฐ, ๋””์ž์ธ์€ 2,1,3์œผ๋กœ ์‹œ์•ˆ์ด ๋‚˜์˜ด
  • ์ฒ˜์Œ์—” 2,1,3 ์„ ๋”ฐ๋กœ ๊ทธ๋ฆฌ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋žญํ‚น์œผ๋กœ ๋น„๊ตํ•ด์„œ ์ถ”์ถœํ•ด์„œ ๋„ฃ์„๊นŒ ํ–ˆ๋Š”๋ฐ,
    rankList๋กœ ๋‚ด๋ ค์˜ค๋‹ค๋ณด๋‹ˆ LazyRow๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•„์ดํ…œ์„ ๊ทธ๋ฆฌ๋Š”๊ฒŒ ๋˜‘๊ฐ™์ด ์ƒ๊ธด ์•„์ดํ…œ์„ 3๋ฒˆ ๊ทธ๋ฆฌ๋Š”๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹ค๊ณ  ํŒ๋‹จ..!
  • ๊ทผ๋ฐ, ์ˆœ์„œ๋ฅผ ์ƒˆ๋กœ ์žฌ์ •๋ ฌ ํ•ด์•ผํ–ˆ๋‹ค!!

๐Ÿ’Ÿ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • 1,2,3 ์ˆœ์„œ๋ฅผ > 2,1,3์œผ๋กœ ๋ณ€๊ฒฝ ํ•ด์•ผ ํ–ˆ๋‹ค.
  • kotlin์—๋Š” sortedBy๋‚˜ reversed() ๋“ฑ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ์ŠคํŠธ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ง€๊ธˆ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ํŠน์ • ์ˆœ์„œ๋กœ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์›ํ•˜๋Š” ์ˆœ์„œ๋กœ ์žฌ์ •๋ ฌํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Kotlin ์˜ sortedBy ์‚ฌ์šฉ!
LazyRow(horizontalArrangement = Arrangement.spacedBy(26.dp)) {
    rankList?.let {
        // rank ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ 2, 1, 3 ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ
        val sortedList = it.sortedBy { item -> when (item.rank) {
            2 -> 0
            1 -> 1
            3 -> 2
            else -> Int.MAX_VALUE  // ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๊ฐ’์€ ๋งจ ๋์œผ๋กœ ๋ฐฐ์น˜
        }}
        
        itemsIndexed(sortedList) { index, item ->
            RankItem(item = item)
        }
    }
}
  • sortedBy ๋Š” Kotlin์—์„œ ์ปฌ๋ ‰์…˜์„ ์ •๋ ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜!
  • ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•จ.

๐Ÿ“Œ sortedBy ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

val sortedList = list.sortedBy { item -> /* ์ •๋ ฌ ๊ธฐ์ค€ */ }

: ๋žŒ๋‹ค์‹ ์•ˆ์—์„œ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•œ ์ •๋ ฌ ๊ธฐ์ค€์„ ์ •์˜ํ•จ.
: sortedBy๋Š” ๋žŒ๋‹ค์‹์„ ํ†ตํ•ด ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ๊ฐ’์„ ์ถ”์ถœํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ :

val items = listOf(3, 1, 2, 5, 4)
val sortedItems = items.sortedBy { it }  // ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

println(sortedItems)  // [1, 2, 3, 4, 5]

โญ๏ธ sortedBy์™€ when์„ ํ™œ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ ์žฌ์ •๋ ฌ

val rankList = listOf(
    RankItem(rank = 2, name = "User 2"),
    RankItem(rank = 1, name = "User 1"),
    RankItem(rank = 3, name = "User 3")
)

val sortedList = rankList.sortedBy { item ->
    when (item.rank) {
        2 -> 0  // 2์œ„๋Š” ๊ฐ€์žฅ ๋จผ์ € ์˜ค๋„๋ก 0์„ ๋ฐ˜ํ™˜
        1 -> 1  // 1์œ„๋Š” ๋‘ ๋ฒˆ์งธ๋กœ ์˜ค๋„๋ก 1์„ ๋ฐ˜ํ™˜
        3 -> 2  // 3์œ„๋Š” ์„ธ ๋ฒˆ์งธ๋กœ ์˜ค๋„๋ก 2๋ฅผ ๋ฐ˜ํ™˜
        else -> Int.MAX_VALUE  // ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฐ’์€ ๋งจ ๋์œผ๋กœ ๋ฐฐ์น˜
    }
}

println(sortedList)  // ์ˆœ์œ„๊ฐ€ 2, 1, 3 ์ˆœ์„œ๋กœ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ

-> ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด sortedBy๊ฐ€ ๋žŒ๋‹ค์‹์œผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ์ •๋ ฌ๊ธฐ์ค€ ๋Œ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•จ!!

์ค‘์š”ํ•œ ์  : ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ๋Š” ์ƒˆ๋กœ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ์›๋ณธ ๋ฆฌ์ŠคํŠธ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค!

profile
๋ฐ”๋‹๋ผ๋ผ๋–ผ ์ข‹์•„โ˜•

0๊ฐœ์˜ ๋Œ“๊ธ€