배열
기본적인 배열 표현
배열을 생성하기 위해서는 arrayOf() 나 Array() 생성자를 사용하면 되고, 빈 상태의 배열을 지정하는 경우 arrayOfNulls()를 사용하면 된다.
다차원 배열의 경우 arrayOf안에 다시 arrayOf로 배열을 선언하면 다차원 배열을 만들 수 있다.
val arr = arrayOf(arrayOf(1,2,3), arrayOf(4,5,6), arrayOf(7,8,9))
for (e1 in arr) {
for (e2 in e1) {
println(e2)
}
println()
}
과 같이 2차원 배열을 선언하고, for문을 사용해 각 값을 출력할 수 있다.
특정 자료형으로 제한하지 않는다면 여러가지 자료형을 혼합할 수 있다.
val mixArr = arrayOf(1, 2, 3, "asd", 450.4f, false)
다음과 같이 다양한 자료형을 혼합해서 하나의 배열로 만들어 사용이 가능하다.
배열에서 특정 자료형을 제한하고자 하려면 arrayOf<자료형>() 형태나 자료형 + ArrayOf() 형태의 조합으로 나타낼 수 있다.
val arr1 = arrayOf<Int>(1, 2, 3, 4)
val arr2 = intArrayOf(5, 6, 7, 8)
배열 요소에 접근하기
Array 클래스는 get() 과 set() 메서드를 가지고 있는데, 이것은 요소에 접근하기 위한 게터/세터 이다. 또한, 대괄호를 사용해도 접근할 수 있다.
val arr = intArrayOf(1, 2, 3, 4)
println(arr.get(1))
println(arr[2])
val arr2 = arrayOf(arr, arr, arr)
println(arr2[2][1])
arr.set(2, 7)
arr[0] = 6
arr2[2][1] = 5
배열의 내용 출력
Arrays의 멤버인 toString()을 사용하면 배열의 내용을 한꺼번에 출력할 수 있다.
위의 예제에서 사용된 arr를 toString을 통해 출력하게 되면 Arrays.toString(arr) 로 선언하며 [1, 2, 3, 4] 로 출력된다.
다차원 배열을 표현하고자 하면 deepToString을 사용하면 되고, 이 또한 대괄호를 통해 구분되어 출력된다.
[[1, 2, 3, 4], [1, 2, 3, 4], ...] 처럼 말이다.
표현식을 통해 배열 생성하기
Array() 생성자에 표현식을 사용해 배열을 생성할 수 있다.
val|var 변수 이름 = Array(요소 개수, 초기값)
val arr = Array(5, {i -> i * 2})
val arr2 = Array(100, {0})
위의 예제에서 표현식 i -> i * 2 으로 만들어지는 배열의 요소는 0, 2, 4, 6, 8 가 된다.
요소 추가하고 잘라내기
배열이 정의되면 고정되기 때문에 새로 할당하는 방법으로 요소를 추가하거나 잘라낼 수 있다.
- plus() : 하나의 요소를 추가
- sliceArray() : 필요한 범위를 잘라내 새 배열 생성
배열 관련 API
- first() : 첫 번재 요소 확인
- last() : 마지막 요소 확인
- indexOf() : 인자로 받은 요소의 인텍스 출력
- average() : 배열의 평균 값 출력
- count() : 요소 개수 세기
- contains() : 배열에 요소가 포함되어 있는지 확인
- arr.contains(5) == 5 in arr
- forEach { 표현식 } : 배열의 요소 개수만큼 지정한 구문을 반복 실행
- arr.forEach { element -> "$element" }
- forEachIndexed { } : forEach 기능과 더불어 인덱스 까지 출력한다.
- arr.forEachIndexed ({ i, e -> pinrlnt("arr[$i] = $e" })
배열 정렬하기
- sortedArray() : 오름차순 정렬 후 일반 배열로 반환
- sortedArrayDescending() : 내림차순 정렬 후 일반 배열로 반환
- sort(), sortDescending() : 원본 배열에 대한 정렬
- sorted(), sortedDescending() : List로 반환
- sortBy { 표현식 } : 표현식에 따른 정렬
기타 메서드
- flatten() : 배열 평탄화에 쓰이는 메서드. 다차원 배열을 단일 배열로 만들 수 있다.
- filter() : 표현식에 따라 원하는 데이터를 골라낼 수 있다.
문자열 다루기
- 문자열 추출하고 병합하기 : substring() 이나 subsequence()를 사용해 특정 범위의 문자열을 추출할 수 있다. 인자로 인덱스 범위를 지정하여 사용한다.
String.substring(인덱스 범위): String
CharSequence.subSequence(인덱스 범위): CharSequence
- 문자열 비교하기 : s1.compareTo(s2) 를 사용하여 문자열을 비교하며. s1과 s2이 같다면 0, s1이 s2보다 작으면 양수 크면 음수의 값을 반환한다.
StringBuilder
StringBuilder를 사용하면 문자열이 사용할 공간을 좀 더 크게 잡을 수 있기 때문에 요소를 변경할 때 이 부분이 사용되어 특정 단어를 변경할 수 있게 된다.
var s = StringBuilder("Hello")
s[2] = 'x'
// Hexlo가 된다.
StringBuilder 관련된 메서드를 사용하면 포함(append), 추가(insert), 삭제(delete)가 용이하다.
s.append("World") // HexloWorld
s.insert("10", "Added") // HexloWorldAdded
s.delete(5,10) // hexloAdded
기타 문자열 처리
- toLowerCase : 소문자로 변경
- toUpperCase : 대문자로 변경
- split : 특정 문자 단위로 잘라내기
- trim : 앞뒤 공백 제거
- toInt : 문자열을 정수로 변환하여 반환
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 9장. 표준 함수와 파일 입출력 (0) | 2020.07.14 |
---|---|
[Kotlin] 9장. 컬렉션 (0) | 2020.07.10 |
[Kotlin] 8장. 제네릭과 배열 1 - 제네릭 (0) | 2020.07.08 |
[Kotlin] 7장. 다양한 클래스와 인터페이스 2 - 데이터 클래스와 연산자 오버로딩 (0) | 2020.07.06 |
[Kotlin] 7장. 다양한 클래스와 인터페이스 1 - 추상 클래스와 인터페이스 (0) | 2020.07.03 |