코틀린에서 배열은 Array 클래스로 표현된다.
배열을 사용하는 방법
전통적인 배열은 동일한 자료형의 데이터를 연속적으로 나열한 형태를 말한다.
기본적으로 배열은 1차원적으로 순서 번호에 해당하는 인덱스와 값이 들어있는 자료형에 따른 요소의 저장 공간을 가지고 있다.
배열을 생성하기 위해서는 arrayOf() 또는 Array() 생성자를 사용해 배열을 만든다.
빈 상태의 배열을 지정하는 경우 arrayOfNulls()를 사용한다.
val numbers = arrayOf(4, 5, 6, 3)
val animals = arrayOf("Cat", "Dog", "Lion")
for (e in numbers) {
println(e)
}
val mixArr = arrayOf(4, 5, 1, "Goal", false) // 여러가지 자료형
val intOnlyArr = arrayOf<Int>(4,5,6,3) // 자료형 제한
val intOnlyArr2 = intArrayOf(4,5,6,7) // 자료형 + ArrayOf 조합
val arr = intArrayOf(1,2,3,4,5)
arr.get(2)
arr[2]
// arr.get(), arr[] 표현은 동일
보통 코드를 읽기에 더 좋은 대광호 표기법을 추천.
// 아래와 같은 방법으로 모든 요소를 순환
for (i in 0..arr.size-1) { ... }
자바의 표준 라이브라리 Arrays에서 멤버인 toString()을 사용하면 배열의 내용을 한꺼번에 출력할 수 있다.
val arr = intArrayOf(1,2,3,4,5)
println(Arrays.toString(arr))
//다차원 배열을 표기할때는 아래와 같이
println(Arrays.deepToString(array))
표현식을 통해 배열 생성하기
// var OR val 변수이름 = Array(요소 개수, 초깃값)
val arr = Array(5, {i -> i * 2})
val a = arrayOfNulls<Int>(1000) // 1000개의 null로 채워진 정수 배열
var a = Array(1000, { 0 }) // 0으로 채워진 배열
배열 제한하고 처리하기
val arr1 = intArrayOf(1,2,3,4,5)
val arr2 = arr1.puls(6) // 하나의 요소를 추가한 새 배열 생성
val arr3 = arr1.sliceArray(0..2) // 필요한 범위를 잘라내 새 배열 생성
arr1.first() // 첫 번째 요소
arr1.last() // 마지막 요소
arr1.indexOf(3)
arr1.average() // 배열의 평균 값
arr1.count() // 요소 개수
// 그 밖에
// reversedArray, reverse, sum, fill, contains 등..
arr1.contain(4)
4 in arr1
// 위 두개는 같음
다양한 자료형을 위한 Any로 선언된 배열
val a = Array<Any>(10, {0})
b[0] = "hi"
b[1] = 1.1
멤버 메서드를 통한 배열 순환
// forEach()에 의한 요소 순환
arr.forEach { e -> println("$e") }
// forEachIndexed()에 의한 요소 순환
arr.forEachIndexed({ i, e -> println("arr[$i] = $e") })
//oterator()를 사용한 요소 순환
val iter: Iterator<Int> = arr.iterator()
while (iter.hasNext( )) {
val e = iter.next()
println("$e")
}
배열 정렬하기
기본 배열 정렬하고 반환하기
import java.util.*
fun main() {
val arr = arrayOf(6, 2, 3, 1, 7, 4)
// 정렬후 배열 반환
val a1 = arr.sortedArray() // 오름차순
val a2 = arr.sortedArrayDescending() // 내림차순
println(Arrays.toString(a1))
println(Arrays.toString(a2))
// 원본 배열에 대한 정렬
arr.sort(1, 4) // sort(fromIndex, toIndex)
println(Arrays.toString(arr))
arr.sortDescending()
println(Arrays.toString(arr))
// List로 반환
val list1: List<Int> = arr.sorted()
val list2: List<Int> = arr.sortedDescending()
println(list1)
println(list2)
// sortBy를 이용한 특정 표현식에 따른 정렬
val items = arrayOf<String>("asd", "asdasd", "z")
items.sortBy { item -> item.length }
println(Arrays.toString(items))
}
//[1, 2, 3, 4, 6, 7]
//[7, 6, 4, 3, 2, 1]
//[6, 1, 2, 3, 7, 4]
//[7, 6, 4, 3, 2, 1]
//[1, 2, 3, 4, 6, 7]
//[7, 6, 4, 3, 2, 1]
//[z, asd, asdasd]
sortWith() 비교자로 정렬하기
-
배열 필터링하기
val arr = arrayOf(1, -2, 3, 4, -5, 0)
arr.filter { e -> e > 0 }.forEach { e -> print("$e") }
fun main() {
val arr = arrayOf("aa", "bb", "ab", "ba")
arr
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.uppercase() }
.forEach { println(it) }
}
//AA
//AB
배열 평탄화
다차원 배열을 단일 배열로 만드는 것을 배열을 평탄화(flatten) 한다 라고 말함.
Array의 flatten() 메서드를 사용한다.
'코틀린' 카테고리의 다른 글
Do it! 코틀린 프로그래밍, 03-2 함수형 프로그래밍 (0) | 2021.08.23 |
---|---|
Do it! 코틀린 프로그래밍, 03-1 함수 선언하고 호출하기 (0) | 2021.08.23 |
Do it! 코틀린 프로그래밍, 08-1 제네릭 다루기 (0) | 2021.08.02 |
Do it! 코틀린 프로그래밍, 07-2 데이터 클래스와 기타 클래스 (0) | 2021.08.01 |
Do it! 코틀린 프로그래밍, 07-1 추상 클래스와 인터페이스 (0) | 2021.07.21 |