Develop!/Kotlin

Set in Kotlin

체리필터 2023. 8. 2. 16:41
728x90
반응형

Java에서도 중복된 값을 허용할 땐 List, Unique한 값만을 허용할 땐 Set을 사용한다.

Kotlin에서도 그와 동일하게 사용할 수 있다.

fun sets() {
    val intSet = setOf(1, 1, 2, 3, 9, 9, 4)
    println(intSet)

    println(9 in intSet)
    println(99 in intSet)

    println("9 contains : " + intSet.contains(9))
    println("99 contains : " + intSet.contains(99))

    print("[1, 9, 2] containsAll : ")
    println(intSet.containsAll(setOf(1, 9, 2)))
    print("[1, 9, 5] containsAll : ")
    println(intSet.containsAll(setOf(1, 9, 5)))

    println(intSet.union(setOf(3, 4, 5, 6)))

    println(intSet intersect setOf(0, 1, 2, 7, 8))
    println(intSet.intersect(setOf(0, 1, 2, 7, 8)))

    println(intSet.subtract(setOf(0, 1, 9, 10)))
}

fun main() {
    sets()
}

set의 원소로 중복된 값을 넣어 생성을 해도 값을 출력해 보면 중복이 제거 된 것을 볼 수 있다.

해당 Set 안에 값이 있는지 없는지는 'in'을 통해 확인할 수 있으며, 반대로 contains를 쓸 수 있다.

해당 원소들이 모두 있는지를 확인하려면 containsAll을 쓸 수 있다. 하나의 값이라도 없으면 false를 반환한다.

합집합, 교집합, 차집합을 위해서는 union, intersect, subtract를 사용할 수 있다.

list를 set으로 바꿀 수도 있다.

fun listToSet() {
    val list = listOf(3, 3, 2, 1, 2)
    println(list)

    val set = list.toSet()

    var setOf1 = setOf(3, 3, 2, 1, 2)
    setOf1 += 10

    val mutableSetOf = mutableSetOf(3, 3, 2, 1, 2)
    mutableSetOf += 10

    println(set)
    println(setOf1)
    println(mutableSetOf)

    println(list.distinct())
    println("abbcc".toSet())
}

fun main() {
    listToSet()
}

list에서는 중복이 허용되지만 toSet 함수 호출 이후에는 중복된 값이 사라졌음을 알 수 있다.

setOf로 만든 경우에는 읽기 전용으로 만들어 지지만, mutableSetOf를 사용한다면 값을 추가, 삭제 할 수 있다.

중복을 제거하기 위해서 set 대신에 distinct를 사용할 수도 있다.

문자열을 set으로 바꾸게 되면 중복되는 문자는 사라지게 된다.

 

728x90
반응형

'Develop! > Kotlin' 카테고리의 다른 글

Property in kotlin  (0) 2023.08.07
Map in Kotlin  (0) 2023.08.04
가변인자 목록 in Kotlin  (0) 2023.08.02
list int kotlin  (0) 2023.07.31
생성자 in kotlin  (0) 2023.07.27