fun main() {
val arr1 = arrayOf<Int>(1, 2, 3, 4, 5) // [1,2,3,4,5]
val arr2 = arrayOf("하나", "둘", "셋", 1, 2, 3) // [하나, 둘, 셋, 1, 2, 3]
val arr3 = arrayOfNulls<Int>(3) // [null, null, null]
val arr4 = Array<Int>(5) {0} // [0, 0, 0, 0, 0]
val arr5 = Array<String>(3) {i -> "Name$i"} // [Name0, Name1, Name2]
}
코틀린에서 배열을 선언하는 방법에는 크게 arrayOf와 Array가 있다. arrayOf는 배열의 크기를 지정할 수는 없지만 배열 선언과 동시에 배열의 원소 값을 직접 지정해줄 수 있다. 자료형을 명시하지 않은 경우에는 자료형이 혼합된 배열 생성도 가능하다. Array는 배열 선언과 동시에 배열의 크기를 지정해야 한다. 중괄호를 이용해 배열의 초기값을 지정할 수 있고 람다식을 활용해 초기값을 조작할 수 있다.
fun main() {
val arr1 = arrayOf<Int>(1, 2, 3, 4, 5) // [1,2,3,4,5]
println(arr1[3]) // 4
arr1[3] = 10 // 배열의 값 수정
println(arr1[3]) // 10
리스트는 읽기전용과 수정가능한 종류로 구분한다. 배열(array)와 달리 크기가 정해져있지 않아 동적으로 값을 추가할 수 있다.
fun main(args: Array<String>) {
val list1: List<Int> = List(3) { i -> i } // [0, 1, 2]
val list2: List<String> = listOf("하나", "둘", "셋") // [1, 2, 3]
val list3 = mutableListOf<Int>(1,2,3,4,5) // [1, 2, 3, 4, 5]
list1[0] = 3 // 수정 불가, 오류 발생
println(list1[0]) // 0
list3[1] = 8 // 데이터 수정
println(list3) // [1, 8, 3, 4, 5]
}
var scores1 = listOf(1,2,3)
val items = listOf("apple", "banana", "kiwi")
for(index in items.indices) { //indices -> 0..2
println("item at $index is ${items[index]}")
}
}
+++ indices = 반복문을 통해 배열의 최소 인덱스..최대 인덱스 반환
수정 가능 리스트. 인덱스에 접근해서 값 변경 가능. mutable !!
var scores2 = mutableListOf(1,2,3)
scores2.set(0(인덱스),5)
var scores3 = ArrayList<자료형>(1,2,3)
scores3.set(인덱스,값)
fun main(args: Array<String>) {
val arr1 = ArrayList<Int>() // []
arr1.add(10)
arr1.add(20)
arr1.add(30)
arr1.add(40) // 맨 뒤에 원소 삽입
println(arr1) // [10, 20, 30, 40]
arr1.remove(20) // 맨 앞에서 부터 20을 찾아 삭제
println(arr1) // [10, 30, 40]
arr1.removeAt(1) // 1번째 인덱스 위치의 데이터 삭제
println(arr1) // [10, 40]
arr1.removeFirst() // 맨 첫 번째 원소 삭제
arr1.removeLast() // 맨 마지막 원소 삭제
arr1.clear() // 배열 전체 비우기
}
fun main() {
var a_list = ArrayList<String>()
a_list.add("one")
a_list.add("two")
a_list.add("three")
println(a_list.toArray()) // [Ljava.lang.Object;@7f63425a
println(a_list.toList()) // [one, two, three]
println(a_list.toString()) // [one, two, three]
}
출처: https://kkh0977.tistory.com/630
맵은 키와 값의 쌍으로 이루어진 자료형이다.(딕셔너리 형태) 읽기전용과 수정가능 종류로 구분.
// 읽기전용 맵
// 변수명[키]로 데이터에 접근할 수 있다
var scoreInfo1 = mapOf("kor" to 94, "math" to 90, "eng" to 92)
println(scoreInfo1) //{kor=94, math=90, eng=92}
println(scoreInfo1["kor"])
// 수정가능한 맵
// 변수명[키]로 데이터에 접근할 수 있다
var scoreInfo2 = mutableMapOf("kor" to 94, "math" to 90)
scoreInfo2["eng"] = 92
println(scoreInfo2["eng"])
// 맵의 키와 값을 동시에 추출해서 사용할 수 있다
for((k,v) in scoreInfo2) {
println("${k}의 값은 ${v}입니다")
}
}
val langMap: Map<Int,String> = mapOf(11 to "Java", 22 to "Kotlin", 33 to "C++")
for((key, value) in langMap){
println("key=$key, value=$value")
// key=11, value=Java
// key=22, value=Kotlin
// key=33, value=C++
}
println("langMap[22] = ${langMap[22]}")
// langMap[22] = Kotlin
println("langMap.get(22) = ${langMap.get(22)}")
// langMap.get(22) = Kotlin
println("langMap.keys = ${langMap.keys}")
// langMap.keys = [11, 22, 33]
/* 요소를 키와 값의 쌍의 형태로 저장. 키는 중복 불가능. 사이즈 자동, 기본 Immutable */
val map1 = mapOf(1 to "Kim", 2 to "Han") // 수정 불가능
val map2 = mutableMapOf(1 to "Kim", 2 to "Han") // 수정 가능
map2.size // 맵의 사이즈 반환
map2.keys // 맵의 모든 키 반환
map2.values // 맵의 모든 값 반환
map2.isEmpty() // 맵이 비어있으면 true, 아니면 false
map2.containsKey(1) // 1에 해당하는 키가 있으면 true, 아니면 false
map2.containsValue("Kim") // Kim에 해당하는 값이 있다면 true, 아니면 false
map2[1] // 키에 해당하는 값 반환.
//map2.get(1) 과 같음.
val map1 = mapOf(1 to "Kim", 2 to "Han") // 수정 불가능
val map2 = mutableMapOf(1 to "Kim", 2 to "Han") // 수정 가능
map2.put(3, "Lee") // 3과 Lee의 쌍 추가
map2.remove(1) // 1에 해당하는 요소 제거
map2.clear() // 초기화
/* 집합은 순서를 가지지 않고, 중복 불가능. 사이즈가 자동으로 정해지며 기본은 Immutable 타입 */
val set1 = setOf(1,2,3) // 1,2,3을 담은 Set 생성 (수정 불가)
val set2 = mutableSetOf(1,2,3) // 1,2,3을 담은 mutableSet 생성 (수정 가능)
set2.remove(2) // 집합에서 2 삭제
// 읽기전용 Set입니다.
var birdSet = setOf("닭", "참새", "비둘기")
// 수정가능 Set입니다.
// var mutableBirdSet = mutableSetOf("닭", "참새", "비둘기")
// mutableBirdSet.add("꿩")
// mutableBirdSet.remove("꿩")
println("집합의 크기는 ${birdSet.size} 입니다")
var findBird = readLine()!!
if(birdSet.contains(findBird)) {
println("${findBird} 종류는 존재합니다.")
} else {
println("${findBird}는 존재하지 않습니다.")
}
// 귀여운 새의 집합
var birdSet = setOf("닭", "참새", "비둘기", "물오리")
// 날수있는 새의 집합
var flyBirdSet = setOf("참새", "비둘기", "까치")
// 모든 새의 집합 (합집합)
var unionBirdSet = birdSet.union(flyBirdSet)
// 귀엽고 날수있는 새의 집합 (교집합)
var intersectBirdSet = birdSet.intersect(flyBirdSet)
// 귀여운 새들중에서 날수없는 새의 조합 (차집합)
var subtractBirdSet = birdSet.subtract(flyBirdSet)
println("=====합집합=====")
println("모든 새의 집합 : ${unionBirdSet}")
println("=====교집합=====")
println("귀엽고 날수있는 새의 집합 : ${intersectBirdSet}")
println("=====차집합=====")
println("귀엽고 날수없는 새의 집합 : ${subtractBirdSet}")