programing

Swift 배열에 작업(연합, 교차로)을 설정하시겠습니까?

padding 2023. 8. 11. 21:34
반응형

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에게 감사드립니다.

스위프트 세트 운영

enter image description here

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에는 이러한 작업이 없습니다. 하지만 간단한 해결 방법이 있습니다.

목적 C에서 두 배열을 교차시키는 방법은?

언급URL : https://stackoverflow.com/questions/24589181/set-operations-union-intersection-on-swift-array

반응형