반응형
SE-0240 Ordered Collection Diffing 프로포절은 제목처럼 컬렉션끼리 비교해서 차이점을 얻기 위한 것으로 Swift 5.1에 구현되었습니다.
단순하게 말하자면 difference()
라는 메서드가 Collection
에 추가되었다라고도 볼 수 있겠네요.
일단 예제를 봅시다.
let alpha1 = ["a", "b", "c"]
let alpha2 = ["a", "c", "d"]
let diff = alpha1.difference(from: alpha2)
for d in diff {
print(d)
}
.difference()
메서드를 이용해 두 컬렉션을 비교할 수 있습니다. 결과는 CollectionDifference
라는 타입의 컬렉션으로 돌아오는데 데이터를 가지고 있는 enum 필드들이 들어있습니다.
위 예제의 경우 차이점을 구해서 print()를 이용해 인쇄를 했고 아래와 같은 결과를 얻었습니다.
remove(offset: 2, element: "d", associatedWith: nil)
insert(offset: 1, element: "b", associatedWith: nil)
내용을 해석하면 2번 인덱스의 "d" 엘리먼트가 삭제되었고 1번 인덱스에 "b" 엘리먼트를 추가해야 한다 이렇게 볼 수 있습니다.
따라서 위의 alpha1.difference(from: alpha2)
코드는 alpha2를 alpha1과 동일하게 바꾸려면 어떻게 해야 하는지를 구하는 메서드입니다.
실제로 차이점을 없애서 동일하게 만들려면 아래처럼 switch 문으로 처리하는 코드를 추가하면 되겠네요.
let alpha1 = ["a", "b", "c"]
var alpha2 = ["a", "c", "d"]
let diff = alpha1.difference(from: alpha2)
for d in diff {
switch d {
case .remove(let offset, _, _):
alpha2.remove(at: offset)
case .insert(let offset, let element, _):
alpha2.insert(element, at: offset)
}
}
alpha1 == alpha2 // true
와 정말 대단한 기능 같....기는 한데 사실 어디다 써먹어야 할지 아직 감은 안 옵니다. 언젠가 이런 것도 필요할 때도 있겠지요. 😁
728x90
반응형
'기술적인 이야기 > 애플 플랫폼 개발' 카테고리의 다른 글
[Swift 5.1] 초기화 없는 배열 생성하기 (SE-0245) (0) | 2019.10.24 |
---|---|
[Swift 5.1] Opaque Result Types 그리고 some (SE-0244) (0) | 2019.10.18 |
[Swift 5.1] 구조체 생성자에 기본값 지원 (SE-0242) (0) | 2019.10.17 |
[Swift 5.1] Self 키워드의 기능 추가 (SE-0068) (1) | 2019.10.13 |
Swift 5에서는 뭐가 바뀌었을까? (0) | 2019.04.07 |
댓글