ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] Array μ‚¬μš©λ²•
    Android/Kotlin 2021. 8. 12. 02:03
    λ°˜μ‘ν˜•
    • 이 글은 "μœ€μž¬μ„±μ˜ Google 곡식 μ–Έμ–΄ Kotlin" κ°•μ˜λ₯Ό λ“£κ³  κ³΅λΆ€ν•œ λ‚΄μš©μœΌλ‘œ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    Array

    • C++, Javaμ—μ„œλ„ λ™μΌν•˜κ²Œ μ‘΄μž¬ν•˜λŠ” λ°°μ—΄(Array)λŠ” μ—°μ†λœ λ©”λͺ¨λ¦¬ μ„ ν˜• 곡간을 ν™•λ³΄ν•˜μ—¬ 값을 μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 자료 ꡬ쑰 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

    • 배열은 0λΆ€ν„° μ‹œμž‘λ˜λŠ” 인덱슀 번호둜 κ΄€λ¦¬ν•˜κ³  Kotlinμ—μ„œ ArrayλŠ” Generic νƒ€μž…μœΌλ‘œ μ •ν•΄μ Έ μžˆμ–΄ λ‹€μ–‘ν•œ νƒ€μž…μ˜ 값을 담을 수 μžˆμŠ΅λ‹ˆλ‹€.

    • Kotlinμ—μ„œλŠ” 배열을 μƒμ„±ν•˜λŠ” λ³„λ„μ˜ ν•¨μˆ˜κ°€ μ£Όμ–΄μ§€λŠ”λ° arrayOf() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

    • arrayOfμ—λŠ” ν•˜λ‚˜μ˜ νƒ€μž…λ§Œμ΄ μ•„λ‹Œ μ—¬λŸ¬ νƒ€μž…μ„ 담을 수 있고, ν•œ νƒ€μž…μœΌλ‘œ μ œν•œν•˜κ³  μ‹ΆμœΌλ©΄ μžλ£Œν˜• + arrayOf() ν˜•νƒœμ˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    • arrayOf< Type >도 κ°€λŠ₯ν•©λ‹ˆλ‹€.

    fun main(){
        val array1 = arrayOf(10, 20.0, "30", "hi")
    
        println(array1)
        println(array1.contentToString())
    }

    λ‹€μŒκ³Ό 같이 arrayμ—λŠ” Int, Float, Stirng νƒ€μž… λ“± μ—¬λŸ¬ νƒ€μž…μ΄ 곡쑴할 수 μžˆμŠ΅λ‹ˆλ‹€. 배열을 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œ array1자체λ₯Ό print ν•˜κ²Œ 되면,
    ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ˜ 해쉬 값이 λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€. λ°°μ—΄ λ‚΄λΆ€μ˜ 값듀을 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” contentToString() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    fun main(){
        val array1 = arrayOf(10, 20, "30", "hi")
        val array2 = intArrayOf(1,2,3)
        val array3 = doubleArrayOf(10.0, 20.0, 30.0)
        val array4 = charArrayOf('1','2','3')
        val array5 = arrayOf<String>("hi","hello","world")
    }

    λ‹€μŒκ³Ό 같이 λ‹€μ–‘ν•œ νƒ€μž…μœΌλ‘œ λ‚˜νƒ€λ‚Όμˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.


    Array 생성

    • arrayOf ν•¨μˆ˜κ°€ μ•„λ‹Œ Array 클래슀λ₯Ό 톡해 직접 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

    • Array(갯수, {식}) ν˜•νƒœλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. κ³ μ°¨ν•¨μˆ˜μ˜ νŠΉμ§•μœΌλ‘œ λžŒλ‹€μ‹μ˜ μ€‘κ΄„ν˜ΈλŠ” μ˜†μ— λ”°λ‘œ λΉΌμ„œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    fun main(){
        val array1 = Array(5,{0})   // 0 0 0 0 0
        val array2 = Array(5, {"1"})    // 1 1 1 1 1
        val array3 = Array(5, {'2'})    // 2 2 2 2 2
    
        val array4 = Array(5, {it})     // 0 1 2 3 4
        val array5 = Array(5){it*2}     // 9 2 4 6 8
    
        println(array4.contentToString())
        println(array5.contentToString())
    }

    λ‹€μŒκ³Ό 같이 식이 μ ν˜€μžˆλŠ” 곳에 값을 λŒ€μž…ν•˜κ²Œ 되면 λͺ¨λ“  값듀이 ν•΄λ‹Ή κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”κ°€ 되고 kotlinμ—μ„œλŠ” μžλ™μœΌλ‘œ νƒ€μž…μ„ μœ μΆ”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λžŒλ‹€μ‹μ„ μ‚¬μš©ν•  κ²½μš°μ—λŠ” 0λΆ€ν„° ν•˜λ‚˜μ”© μ¦κ°€ν•˜λŠ” 값듀이 λŒ€μž…λ˜κ²Œ λ©λ‹ˆλ‹€.


    닀차원 λ°°μ—΄

    fun main(){
        val array1 = arrayOf(arrayOf(1,2,3), arrayOf(4,5,6), arrayOf(7,8,9))
        println(array1)
        println(array1.contentToString())
        println(array1.contentDeepToString())
    
        for(row in array1){
            for(item in row){
                print(item)
            }
            println()
        }
    
        val array2 = Array(5, Array(5, {0}))
    }
    • λ°°μ—΄ 내뢀에 배열이 μžˆλŠ” κ²ƒμœΌλ‘œ μ½”λ”©ν…ŒμŠ€νŠΈλ₯Ό ν’€ λ•Œ 자주 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 잘 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€.
    • 닀차원 배열을 좜λ ₯ν•  λ•Œμ˜ νŠΉμ§•μ€ contentToString을 μ‚¬μš©ν•˜λ”λΌλ„ λ°°μ—΄ λ‚΄λΆ€λŠ” λ°°μ—΄λ‘œ 있기 λ•Œλ¬Έμ— ν•΄λ‹Ή λ°°μ—΄μ˜ 해쉬값듀이 λ‚˜μ˜€κ²Œ λ©λ‹ˆλ‹€.
    • 닀차원 λ°°μ—΄μ˜ 값듀이 λͺ¨λ‘ 좜λ ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” contentDeepToString() μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    λ°°μ—΄ μ›μ†Œ μ ‘κ·Ό

    fun main(){
        val array1 = arrayOf(1,2,3,4,5)
        println(array1[0])  // 1
        println(array1.get(1))  // 2
    
        array1[0] = -1
        println(array1.contentDeepToString())   // -1 2 3 4 5
    
        array1.set(0,1)
        println(array1.contentDeepToString())   // 1 2 3 4 5
    }
    • 배열을 처음 생성할 λ•Œ μƒμ„±ν•œ λ©”λͺ¨λ¦¬ κ³΅κ°„λ§ŒνΌμ€ 인덱슀λ₯Ό ν†΅ν•΄μ„œ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • 인덱슀둜 μ ‘κ·Όν•˜μ—¬ μ›μ†Œλ₯Ό ν™•μΈν•˜κ±°λ‚˜, get(index) ν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œλ„ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • λ°°μ—΄ μ›μ†Œ λ‚΄λΆ€μ˜ 값을 μ„€μ •ν•  λ•Œλ„ 인덱슀λ₯Ό μ΄μš©ν•˜μ—¬λ‚˜ set(index, value) ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μ—¬λŸ¬ λ©”μ†Œλ“œ

    size : λ°°μ—΄μ˜ 갯수λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

    fun main(){
        val array1 = arrayOf(1,2,3,4,5)
        println(array1.size)    // 5
    }

    plus : νŠΉμ • μ›μ†Œλ₯Ό μΆ”κ°€ν•œ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

    fun main(){
        val array1 = arrayOf(1,2,3,4,5)
        array1.plus(6)
        println(array1.contentToString())    // 1 2 3 4 5
    
        val array2 = array1.plus(6)
        println(array2.contentToString())    // 1 2 3 4 5 6
    }

    plus λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€κ³  ν•˜μ—¬ ν•΄λ‹Ή 배열에 μ›μ†Œκ°€ μΆ”κ°€λ˜λŠ” 것이 μ•„λ‹™λ‹ˆλ‹€. λ°°μ—΄μ˜ ν¬κΈ°λŠ” 처음 생성할 λ•Œ μ •ν•΄μ Έ 있고 λ³€κ²½ν•  수 μ—†κΈ° λ•Œλ¬Έμ— plus λ©”μ†Œλ“œλŠ” μΆ”κ°€ν•  μ›μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•˜κ²Œ ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

    sliceArray : μ§€μ •λœ 인덱슀 λ²”μœ„μ— ν•΄λ‹Ήν•˜λŠ” μ›μ†Œλ§Œ 가지고 μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

    fun main(){
        val array1 = arrayOf(1,2,3,4,5)
        val array2 = array1.sliceArray(1..3)
        println(array2.contentDeepToString())
    }

    first : 제일 μ•žμ˜ 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
    last : 제일 λ’€μ˜ 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
    indexOf : μ§€μ •λœ κ°’μ˜ indexλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

    fun main(){
        val array1 = arrayOf(1,2,3,4,5,3)
        println(array1.first())     // 1
        println(array1.last())      // 3
        println(array1.indexOf(3))  // 2
    }

    indexOf ν•¨μˆ˜ 같은 경우 같은 μ›μ†Œκ°€ λ˜‘κ°™μ΄ μžˆμ„ λ•Œ κ°€μž₯ μ•žμͺ½μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•˜κ²Œ λ©λ‹ˆλ‹€. λ§Œμ•½ λ’€μ—μ„œ λΆ€ν„° μ°Ύκ³  싢은 인덱슀라면 lastIndexOf() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

    average : 평균 값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

    fun main(){
        val array1 = arrayOf(1,2,3,4,5)
        println(array1.average())       // 3     
    }

    count : μ›μ†Œμ˜ 갯수λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
    contains : μ§€μ •λœ 값이 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” ν•¨μˆ˜

    fun main(){
        val array1 = arrayOf(1,2,3,4,5)
        println(array1.count())     // 5
        println(array1.contains(3))     // true
        println(5 in array1)    // true
        println(100 in array1)   // false
    }

    sortedArray : μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬λœ 배열을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
    sortedArrayDescending : λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬λœ 배열을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

    fun main(){
        val array1 = arrayOf(5,1,3,2,4)
        val array2 = array1.sortedArray()
        val array3 = array1.sortedArrayDescending()
        println(array2.contentToString())       // 1 2 3 4 5
        println(array3.contentToString())       // 5 4 3 2 1
    }

    • μΆ”κ°€λ‘œ κΆκΈˆν•œ μ μ΄λ‚˜ μˆ˜μ •ν•  λΆ€λΆ„ 있으면 λŒ“κΈ€λ‘œ λ‚¨κ²¨μ£Όμ„Έμš”.
    λ°˜μ‘ν˜•

    'Android > Kotlin' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

    [Kotlin] List μ‚¬μš©λ²•  (0) 2021.08.12
    [Kotlin] String μ‚¬μš©λ²•  (0) 2021.08.12
    [Kotlin] Functional Programming  (0) 2021.08.11
    [Kotlin] Generic, Inner 클래슀  (0) 2021.07.07
    [Kotlin] Companion Object λž€?  (0) 2021.07.05
Designed by Tistory.