Swift 배열에 작업(연합, 교차로)을 설정하시겠습니까?
두 개의 어레이에서 세트 작업을 수행하거나 이러한 논리를 직접 구현하는 데 사용할 수 있는 표준 라이브러리 호출이 있습니까(가능한 한 기능적이고 효율적)?
네, 스위프트가 가지고 있습니다.Set
학급.
let array1 = ["a", "b", "c"]
let array2 = ["a", "b", "d"]
let set1:Set<String> = Set(array1)
let set2:Set<String> = Set(array2)
Swift 3.0+는 세트에서 다음과 같은 작업을 수행할 수 있습니다.
firstSet.union(secondSet)// Union of two sets
firstSet.intersection(secondSet)// Intersection of two sets
firstSet.symmetricDifference(secondSet)// exclusiveOr
Swift 2.0은 어레이 인수에 따라 계산할 수 있습니다.
set1.union(array2) // {"a", "b", "c", "d"}
set1.intersect(array2) // {"a", "b"}
set1.subtract(array2) // {"c"}
set1.exclusiveOr(array2) // {"c", "d"}
Swift 1.2+는 집합에서 계산할 수 있습니다.
set1.union(set2) // {"a", "b", "c", "d"}
set1.intersect(set2) // {"a", "b"}
set1.subtract(set2) // {"c"}
set1.exclusiveOr(set2) // {"c", "d"}
사용자 지정 구조를 사용하는 경우 해시 가능을 구현해야 합니다.
Swift 2.0 업데이트에 대한 코멘트에 있는 Michael Stern에게 감사합니다.
해시 가능한 정보에 대한 댓글에 있는 Amjad Husseini에게 감사드립니다.
스위프트 세트 운영
예
let a: Set = ["A", "B"]
let b: Set = ["B", "C"]
A와 B의 결합a.union(b)
let result = a.union(b)
var a2 = a
a2.formUnion(b)
//["A", "B", "C"]
A와 B의 대칭적인 차이a.symmetricDifference(b)
let result = a.symmetricDifference(b)
//["A", "C"]
차이 A \ Ba.subtracting(b)
let result = a.subtracting(b)
//["A"]
A와 B의 교차점a.intersection(b)
let result = a.intersection(b)
//["B"]
결과 순서는 해시에 따라 달라집니다.
내가 아는 가장 효율적인 방법은 고델 번호를 사용하는 것입니다.고델 인코딩을 위한 구글.
그런 생각이 듭니다.가능한 숫자가 N개이고 숫자 집합을 만들어야 한다고 가정합니다.예를 들어 N=100,000이며 {1,2,3}, {5,88,19000} 등의 집합을 만들려고 합니다.
이 아이디어는 주어진 집합 {a, b, c, ...에 대해 N 소수의 목록을 메모리에 유지하는 것입니다.당신은 그것을 인코딩합니다.
prime[a]*prime[b]*prime[c]*...
집합을 큰 숫자로 인코딩합니다.정수를 사용하는 작업보다 느리긴 하지만 빅넘버를 사용하는 작업은 여전히 매우 빠릅니다.
두 세트 A, B를 결합하려면 다음과 같이 합니다.
UNITE(A, B) = lcm(a, b)
A와 B로서 A와 B의 최소 공배수는 집합이고 둘 다 숫자입니다.
당신이 타는 교차로를 만드는 것.
INTERSECT(A, B) = gcd (a, b)
최대 공약수
등등.
이 인코딩은 godelization이라고 불립니다. 당신은 더 많은 것을 검색할 수 있습니다. Frege의 논리를 사용하여 작성된 모든 산술 언어는 이러한 방식으로 숫자를 사용하여 인코딩될 수 있습니다.
수술을 받기 위해 멤버로?그것은 매우 간단합니다 --
ISMEMBER(x, S) = remainder(s,x)==0
추기경을 얻는 것은 조금 더 복잡합니다.
CARDINAL(S) = # of prime factors in s
주 요인의 곱에서 집합을 나타내는 숫자 S를 분해하고 해당 지수를 추가합니다.집합에서 중복을 허용하지 않는 경우 모든 지수가 1이 됩니다.
표준 라이브러리 호출은 없지만 ExSwift 라이브러리를 살펴볼 수도 있습니다.여기에는 차이, 교차점 및 결합을 포함한 어레이의 새로운 기능이 다수 포함되어 있습니다.
목표-C와 동일한 패턴을 따르는 것이 좋습니다. 목표-C에는 이러한 작업이 없습니다. 하지만 간단한 해결 방법이 있습니다.
언급URL : https://stackoverflow.com/questions/24589181/set-operations-union-intersection-on-swift-array
'programing' 카테고리의 다른 글
MySQL이 쿼리를 반환하지만 연결이 닫히지 않음 (0) | 2023.08.11 |
---|---|
Node.js 로깅 (0) | 2023.08.11 |
CORS(Cross-Origin Resource Sharing) - 여기에 누락된 내용이 있습니까? (0) | 2023.08.11 |
excel vba selection.address에서 행, 셀 값 가져오기 (0) | 2023.08.11 |
새로 고침 없이 URL에 매개 변수 추가 (0) | 2023.08.11 |