Kotlin

Kotlin - 배열

J_Bin 2022. 6. 20. 17:46

# 배열의 선언 및 접근

package chap02.section1


/* 배열의 선언 및 접근 */

import java.util.Arrays         // 배열을 사용하기 위해 자바 표준 라이브러리 임포트




fun main() {

    val arr = intArrayOf(1,2,3,4,5)


    println("arr : ${arr.contentToString()}")       // 배열의 내용을 문자열로 반환
    println("size : ${arr.size}")                   // 배열의 크기
    println("sum() : ${arr.sum()}")                 // 배열의 합 계산

    // 게터에 의한 접근과 대괄호 연산자 표기법
    println(arr.get(2))
    println(arr[2])

    // 세터에 의한 값의 설정
    arr.set(2,7)
    arr[0] = 8
    println("size: ${arr.size} arr[0]: ${arr[0]}, arr[2]:${arr[2]}")

    // 루프를 통한 배열 요소의 접근
    for (i in arr.indices){
        println("arr[$i] = ${arr[i]}")
    }

    // 다차원 배열 선언 및 출력
    val arr2 = arrayOf(intArrayOf(1,2), intArrayOf(3,4), intArrayOf(5,6,7))
    println(arr2.contentDeepToString())

}

/**/

 

# 배열 제한하고 처리하기

package chap02.section1


/* */

import java.util.Arrays         // 배열을 사용하기 위해 자바 표준 라이브러리 임포트




fun main() {

    val arr1 = intArrayOf(1,2,3,4,5)        // 5개로 고정된 배열

    val arr2 = arr1.plus(6)         // 하나의 요소를 추가한 새 배열 생성
    println(arr2.contentToString())

    val arr3 = arr1.sliceArray(0..2)    // 필요한 범위를 잘라내서 새 배열 생성
    println(arr3.contentToString())

    println(arr1.first())           // 배열의 첫번째 값 출력
    println(arr1.last())            // 배열의 마지막 값 출력
    println(arr1.indexOf(4))        // 요소 4의 index 출력
    println(arr1.average())         // 배열의 평균 값 출력
    println(arr1.count())           // 배열의 개수 출력

    println(arr1.contains(100))     // arr1 배열에 값 100이 포함되어있는지 확인
    println(100 in arr1)            // arr1 배열에 값 100이 포함되어있는지 확인
    





}

# Any 자료형으로 지정된 배열 채우기

package chap02.section1


/* Any 자료형으로 지정된 배열 채우기 */

fun main() {


    val b = Array<Any>(10) { 0 }        // 처음에는 0으로 채워진 크기 10인 배열 선언
    b[0] = "Hello World"                    // 첫번째 값에 "Hello World" 할당 (String)
    b[1] = 1.1                              // 두번째 값에 1.1 할당 (double)

    println(b[0])
    println(b[1])
    println(b[2])



}

/* 이렇게 Any를 사용하면 한 번에 기본적인 초기화를 하고 나중에 원하는 자료형으로 요소를 초기화할 수 있으므로 편리하다.*/

 

# 멤버 메서드를 통한 배열 순환하기

package chap02.section1


/* 멤버 멤서드를 통한 배열 순환하기 */

fun main() {

    val arr1 = intArrayOf(1,2,3,4,5,6,7,8,9)

    arr1.forEach { element -> println("$element") }

    arr1.forEachIndexed { i, e -> println("arr[$i] = $e") }

    // iterator()를 사용한 요소 순환
    val iter : Iterator<Int> = arr1.iterator()
    while (iter.hasNext()){
        val e = iter.next()
        println("$e")
    }
    // hasNext()는 배열에서 참조할다음 요소가 있는지 확인하며, next()는 다음 요소를 반환하는 메서드이다.

}

 

# 배열 정렬하기

package chap02.section1

import java.util.Arrays

data class Product(val name : String, val price : Double)


/* 기본적인 배열 정렬 방법 */
fun main() {

    val arr = arrayOf(8,4,3,2,5,9,1)


    val sortedNums = arr.sortedArray()                          // 오름차순으로 정렬된 배열 반환
    println("ASC : " + sortedNums.contentToString())

    val sortedNumsDesc = arr.sortedArrayDescending()            // 내림차순으로 정렬된 배열 반환
    println("DEC : " + sortedNumsDesc.contentToString())

    // 원본 배열에 대한 정렬
    arr.sort(1,3)                                               // sort(fromIndex,toIndex)
    println("ORI : " + arr.contentToString())
    arr.sortDescending()
    println("ORI : " + arr.contentToString())

    // List로 반환
    val listSorted : List<Int> = arr.sorted()
    val listDesc : List<Int> = arr.sortedDescending()
    println("LST : $listSorted")
    println("LST : $listDesc" )

    // SortBy를 이용한 특정 표현식에 따른 정렬
    val items = arrayOf<String>("Dog","Cat","Lion","Kangaroo","Po")
    items.sortBy { item -> item.length }
    println(items.contentToString())

    val products = arrayOf(
        Product("Snow ball",870.00),
        Product("Smart Phone",999.00),
        Product("Drone",240.00),
        Product("Mouse",333.55),
        Product("Keyboard",125.99),
        Product("Monitor",1500.99),
        Product("Table",512.99))

    products.sortBy { it.price }                // 배열 객체인 products를 it으로 넘기고 제품의 가격인 price가 제일 낮은 것을 기준으로 정렬
    products.forEach { println(it) }










}

# Comparator, compareBy()

package chap02.section1

import java.util.Arrays

/* Comparator를 사용해 제품 비교하기 */

data class Product (val name : String, val price : Int)

fun main() {

    val products = arrayOf(
        Product("Snow ball",870),
        Product("Smart Phone",999),
        Product("Drone",240),
        Product("Mouse",644),
        Product("Keyboard",126),
        Product("Smart Phone B",1501),
        Product("Mouse",513))

    /* Comparator 사용
    products.sortWith(
        Comparator<Product> { p1, p2 ->
            when {
                p1.price > p2.price -> 1
                p1.price == p2.price -> 0
                else -> -1
            }
        }
    )
    products.forEach { println(it) }*/

    /* compareBy() 사용 */
    products.sortWith(compareBy({it.name},{it.price}))
    products.forEach { println(it) }

}

/* Comparator는 자바의 인터페이스로서 2개의 객체를 비교하는 compare()를 구현한다.
    여기서는 람다식 p1,p2 -> when {...}을 이용해 비교 결과가 p1이 p2보다 크면 1을, 같으면 0, 작으면 -1을 반환하도록 구현되어 있다.
    여기에 다시 compareBy()를 함께 사용하면 이름을 먼저 정렬하고 그 다음 이름이 동일한 경우 가격 기준으로 다시 정렬한다.
* */

 

# 배열 필터링하기(메서드 체이닝) - Method Chaining

package chap02.section1

/* 필요한 정보만 골라내어 변경하기 */


fun main() {

    val fruits = arrayOf("banana","avocado","apple","kiwi")
    fruits
        .filter { it.startsWith("a") }
        .sortedBy { it }
        .map { it.toUpperCase() }
        .forEach { println(it) }
}

/* 배열 객체 변수인 fruits에서 여러 개의 메서드인 filter(), sortedBy(), map(), forEach()를 계속 연속해서 
* 호출하는 방법을 메서드 체이닝이라고 한다. 각 결과를 it으로 넘겨받아 처리할 수 있어 매우 유용하다.
*  */

 

# 단일 배열로 변환

package chap02.section1

/* 2차원 배열 평탄화하기 */


fun main() {

    val numbers = arrayOf(1,2,3)
    val strs = arrayOf("one","two","three")
    val simpleArray = arrayOf(numbers,strs)     // 2차원 배열

    simpleArray.forEach { println(it) }
    println(simpleArray.contentDeepToString())

    val flattenSimpleArray = simpleArray.flatten()      // 단일 배열로 변환하기
    println(flattenSimpleArray)


}

'Kotlin' 카테고리의 다른 글

Kotlin - 컬렉션의 확장 함수  (0) 2022.06.21
Kotlin - 컬렉션  (0) 2022.06.21
Kotlin - 제네릭  (0) 2022.06.20
Kotlin - 여러 연산자들의 표현  (0) 2022.06.20
Kotlin - 데이터 클래스(Java의 POJO)와 기타클래스  (0) 2022.06.17