Set

Updated:

🔷 Set

Array 는 한 줄에 몇개의 데이터가 모여있는 형식 (index 가 중요함)

Set 은 한 데이터 덩어리에서 각 형태의 item 들이 들어가는데 기존에 중복되는게 있는경우에는 더이상 추가가 되지 않는것 (set 은 안에 들어가있는 data 의 값이 고유값을 가짐)

// 배열과 비슷한 set
// 배열처럼 중복으로 값을 넣을 수 없다
// 아무리 넣어도 고유한 값들만 남음

var myNumberSet : Set<Int> = Set<Int>()

myNumberSet.insert(1)
myNumberSet.insert(2)
myNumberSet.insert(3)
myNumberSet.insert(4)
myNumberSet.insert(5)
myNumberSet.insert(3) // 3의 값이 이미 있기 때문에 들어가지 않음
myNumberSet.insert(3) // 3의 값이 이미 있기 때문에 들어가지 않음

myNumberSet.count // 5

// 배열과 다르게 순서가 정해져 있지 않다.
// 매번 출력되는 값들의 순서가 다르다
for item in myNumberSet {
	print("itme: \(item)")
}

// collection 이 가지고 있는 기본 연산자도 제공을함

var myFriends : Set<String> = ["Jacob", "Emma", "John"]
myFriends.contains("Jacob") // true

// set 에서 특정 item 을 지우기
if let indexToRemove = myFriends.firstIndex(of: "Jacob") {
	print("indexRemove : ", indexToRemove)
	myFriends.remove(at: indexToRemove)
}
myFriends.contains("Jacob") // false : Jacob 을 지움

🔶 isSubset

Set 을 통해 배열리 다른 배열을 포함하고 있는지 여부를 체크 할 수 있습니다 -> Bool type return

let myPets = ["개냥이", "댕댕이", "꼬북이", "짹짹이"]
let favoritePets = ["개냥이", "댕댕이"]
let friendsPets = ["뚱뚱이", "해피"]

let myPetsSet = Set(myPets)
let favoritePetsSet = Set(favoritePets)
let friendsPetsSet = Set(friendsPets)

// Swift 4.2 버전이상 .isSubset(of: )
let isFavoritePetsInMyPets = favoritePetsSet.isSubset(of: myPetsSet)
let isFriendPetsInMyPets = favoritePetsSet.isSubset(of: friendsPetsSet)

print("isFavoritePetsInMyPets: \(isFavoritePetsInMyPets)")
print("isFirendsPetsInMyPets: \(isFriendPetsInMyPets)")
/*
 isFavoritePetsInMyPets: true
 isFirendsPetsInMyPets: false
 */

// Swift 4.2 아래 버전은 .isSubsetOf() 을 사용해야 합니다

🔶 Union

  • Union 을 사용해서 중복을 제거하고 Array 를 합칩니다

(Array 를 합칠때 array 내의에서 중복을 먼저 없에게 Set type 으로 만듬 => .union 을 사용해야함)

// Array
let myFriends = ["Jacob", "Emma", "Mike", "John"]

let yourFriends = ["Jacob", "Mike", "Paul", "James"]

// Array 를 set으로 만들기
let myFriendsSet = Set(myFriends)
let yourFriendsSet = Set(yourFriends)

// 유니온으로 중복을 제거하고 둘이 합치기
let totalFriends = myFriendsSet.union(yourFriendsSet)

print(totalFriends) // ["Paul", "James", "Mike", "Jacob", "Emma", "John"]

🔶 Intersection

  • Union 과 비슷한데 중복인 요소만 가져오고자 할때는 intersection 을 사용합니다
// Array
let myFriends = ["Jacob", "Emma", "Mike", "John"]

let yourFriends = ["Jacob", "Mike", "Paul", "James"]

// Array 를 set으로 만들기
let myFriendsSet = Set(myFriends)
let yourFriendsSet = Set(yourFriends)

// intersection 으로 중복된 항목만 가져오기
let commonFriends = myFriendsSet.intersection(yourFriendsSet)
print(commonFriends) // ["Jacob", "Mike"]

🔶 SymmetricDifference

  • Intersection 과 반대 되게 중복요소를 제거하고 중복되지 않는 요소들만 가져오고자 할때는 symmetricDifference 를 사용합니다
// Array
let myFriends = ["Jacob", "Emma", "Mike", "John"]

let yourFriends = ["Jacob", "Mike", "Paul", "James"]

// Array 를 set으로 만들기
let myFriendsSet = Set(myFriends)
let yourFriendsSet = Set(yourFriends)

// symmetricDifference 중복되는 요소 제가하기
let exceptDuplicateFriends = myFriendsSet.symmetricDifference(yourFriendsSet)

print(exceptDuplicateFriends) // ["James", "Emma", "Paul", "John"]


Reference

꼼꼼한 재은 씨의 스위프트 문법편 - https://book.jacobko.info/#/book/1186710233

개발하는 정대리 스위프트 기초 문법 - 19일차 / Set - https://www.youtube.com/watch?v=8nPQKGrpbmY&list=PLgOlaPUIbynoqbQw_erl3L2w7vfOTCtFD&index=19

Categories:

Updated:

Leave a comment