코틀린 자료구조 - 배열(Array)

JJAE WON·2022년 1월 25일
0

Kotlin 자료구조

목록 보기
1/1
post-thumbnail

코딩테스트를 앞으로 쭉 kotlin 으로 풀기로 결정했다!! 두둥탁
주로 사용하는 언어와 코테용 언어를 따로 두는게 좋지 않을 것 같아서 이렇게 결정하기로 했다.
그래서 자료구조를 싹 정리하기 위해 작성하게 되었다.
이 포스팅에서는 배열 을 다룬다.



배열(Array)

배열은 여러개의 값을 담을 수 있는 자료형이다.

<init>(size: Int, init: (Int) -> T)

Array 클래스는 배열의 크기와 함께 선언해주어야 하고 지정된 init 함수를 호출하여 지정된 크기의 새 배열을 만들게 된다.

배열 선언 방법

var emptyArray = emptyArray<Int>() // 빈 배열 객체
var array = arrayOf(1,2,3)  // 1,2,3 값이 들어있는 배열
var array2 = Array(10,{0}) // 0으로 초기화된 크기가 10짜리인 배열 
var array3 = arrayOfNulls<Int>(5) // null로 초기화된 크기가 5짜리인 배열
var array4 = Array<Int>(3){ index -> index*2}  //  [0,2,4], 생성자를 이용하여 초기화

배열 선언과 동시에 값을 넣어줄 수도 있고 크기와 함께 모든 초기값을 미리 선언할 수도 있다.
String은 Kotlin의 기본타입이 아니지만 3번째와 같은 방법으로 배열을 초기화 할 수 있다.

타입과 배열

var anyArray = arrayOf("Hi", 1, true, 100.100)

arrayOf()에 특정 타입을 지정하지 않는다면 배열에 어떤 값이 들어가도 상관없다.

var arrayInt = arrayOf<Int>(10,20,30)
var arrayInt2 = intArrayOf(100,200,300)
var stringArray = Array(10, {index ->""} ) // String타입 배열

arrayOf 뒤에 타입을 선언하면 해당 타입만 들어갈 수 있는 배열을 만들 수 있다.
arrayOfArray 클래스에 영향을 받는데 특정타입값으로 지정되어있는 배열전문 클래스인
IntArray , LongArray 등등 코틀린에서 기본으로 제공하는 자료형의 배열도 만들 수 있다.
이것은 자바의 primitive 데이터 타입과 wapper 타입을 왔다갔다 할때 사용되는 boxing 과 관련이 있다. 참고문헌


배열 사용

1. 배열에 값 입력하기

var A = arrayOf<Int>(10)

A[0] = 10
A[1] = 13
A.set(2,10)

2. 배열에 값 가져오기

print("A[0] : ${A[0]},  A[1] : ${A.get(1)}, A[2] : ${A[2]}")
// A[0] : 10, A[1] : 13, A[2] :  10

3. 다차원배열

val array = arrayOf(arrayOf("가", "나", "다", "라"),
        arrayOf(1, 2, 3, 4),
        arrayOf('A', 'B', 'C', 'D'))

    println(array[0][2])
    println(array[1][0])
    println(array[2][3])
    
    /*
    	다
        1
        D
    */

다차원 배열은 배열안에 배열을 선언하는 방법으로 사용된다. 처음부터 바로 값을 넣을 경우 위처럼 선언하면 된다.

    var array2 = Array(3) { Array(4) { 0 } }

    array2[0][3] = 1
    array2[2][1] = 2
    array2[2][3] = 0

    println(array2[0][3])
    println(array2[2][1])
    println(array2[2][3])
    println(array2[0][0])

    /*
    1
    2
    0
    0
    */

위처럼 배열에 직접 값을 넣어서 사용할 수도 있다!

배열 method

size, lastIndex

    var array2 = Array(3) { Array(4) { 0 } }

    array2[0][3] = 1
    array2[2][1] = 2
    array2[2][3] = 0

    println("array2 Size : ${array2.size}, array2 lastIndex : ${array2.lastIndex}")
    println("array2[0] Size : ${array2[0].size}, array2 lastIndex : ${array2[0].lastIndex}")
    
    /*
    array2 Size : 3, array2 lastIndex : 2
    array2[0] Size : 4, array2 lastIndex : 3
    */

size는 배열의 size를! lastIndex는 배열의 마지막인덱스를 반환한다.
알 수 있듯이 lastIndex = size-1

contentToString() , contentDeepToString()

    val array1 = arrayOf(1,2,3)
    val deepArray = arrayOf(array1,array1)

    println(array1.contentToString()) // [1, 2, 3]
    println(deepArray.contentDeepToString()) // [[1, 2, 3], [1, 2, 3]]

배열을 String으로 만들어주는 메소드

sum() , average()

    val array1 = arrayOf(1,2,3)

    println(array1.sum()) // 6
    println(array1.average()) // 2.0 : Double

배열의 합을 반환하는 sum
배열의 평균을 반환하는 average , 타입은 Double

더 많은 메소드는 공식문서

배열 정렬하기

kotlin에서 정렬하는 메서드도 제공한다.

sort() : 기존 배열 정렬

    val array1 = arrayOf(2,1,3)

	array1.sort()
    println(array1.contentToString()) // [1, 2, 3]

sortedArray() , sortedArrayDescending() : 오름차순/내림차순 정렬한 새로운 배열 생성

    val array1 = arrayOf(2,1,3)

	val sorted = array1.sortedArray()  // [1,2,3]
    val sortedDescending() = array1.sortedArrayDescending() //[3,2,1]

sorted() / sortedDescending() : Array -> 정렬된 List 변환

    val listFromArray : List<Int> = array1.toList()
    val sortedListFromArray : List<Int> = array1.sorted()
    val sortedDescendingListFromArray = array1.sortedArrayDescending()

Reference

profile
안드왕 찐천재가 되고싶다.

0개의 댓글