programing

어레이로 신속하게 설정

elecom 2023. 5. 8. 21:53
반응형

어레이로 신속하게 설정

NSSet으로 변환할 수 있습니다.Array사용.set.allObjects()하지만 새로운 것에는 그런 방법이 없습니다.Set(Swift 1.2와 함께 도입됨).SwiftSet을 NSSet으로 변환하고 다음을 사용하여 계속 수행할 수 있습니다.allObjects()방법이지만 최적이 아닙니다.

지정된 Swift에서 모든 요소로 배열을 작성할 수 있습니다.Set간단히 말하면.

let array = Array(someSet)

이는 다음과 같은 이유로 작동합니다.Set에 부합하는SequenceType의전과 anArray시퀀스를 사용하여 초기화할 수 있습니다.예:

let mySet = Set(["a", "b", "a"])  // Set<String>
let myArray = Array(mySet)        // Array<String>
print(myArray) // [b, a]

가장 간단한 경우, Swift 3을 사용하면Array의 이니셜라이저를 사용하여Arraya부터Set.init(_:)에는 다음과 같은 선언이 있습니다.

init<S>(_ s: S) where S : Sequence, Element == S.Iterator.Element

시퀀스 요소를 포함하는 배열을 만듭니다.

용도:

let stringSet = Set(arrayLiteral: "car", "boat", "car", "bike", "toy")    
let stringArray = Array(stringSet)

print(stringArray)
// may print ["toy", "car", "bike", "boat"]

그러나 각 요소에 대해 몇 가지 작업도 수행하려는 경우Set그것을 그것으로 변형시키는 동안.Array사용할 수 있습니다.map,flatMap,sort,filter기타 기능적 방법 제공Collection프로토콜:

let stringSet = Set(["car", "boat", "bike", "toy"])
let stringArray = stringSet.sorted()

print(stringArray)
// will print ["bike", "boat", "car", "toy"]
let stringSet = Set(arrayLiteral: "car", "boat", "car", "bike", "toy") 
let stringArray = stringSet.filter { $0.characters.first != "b" }

print(stringArray)
// may print ["car", "toy"]
let intSet = Set([1, 3, 5, 2]) 
let stringArray = intSet.flatMap { String($0) }

print(stringArray)
// may print ["5", "2", "3", "1"]
let intSet = Set([1, 3, 5, 2])
// alternative to `let intArray = Array(intSet)`
let intArray = intSet.map { $0 }

print(intArray)
// may print [5, 2, 3, 1]

정렬되지 않은 간단한 확장자를 만들었습니다.Array의 재산으로서Set스위프트 4.0에서.

extension Set {
    var array: [Element] {
        return Array(self)
    }
}

정렬된 배열을 원하는 경우 계산된 속성을 추가하거나 필요에 따라 기존 속성을 수정할 수 있습니다.

이것을 사용하려면, 그냥 전화하세요.

let array = set.array

추가:

Swift에는 집합 및 사전에 대한 정의된 순서가 없습니다.따라서 배열이 ["a","b"] 또는 ["b","a"]와 같은 예기치 않은 결과를 얻지 않도록 sorted() 방법을 사용해야 하며 이를 원하지 않습니다.

해결 방법:

세트용

var example:Set = ["a","b","c"]
let makeExampleArray = [example.sorted()]
makeExampleArray 

결과: ["a","b","c"]

정렬되지 않음()

다음이 가능합니다.

["a","b","c"] or ["b","c","a",] or ["c","a","b"] or ["a","c","b"] or ["b","a","c"] or ["c","b","a"] 

간단한 수학 : 3! = 6

Swift 2.x 이상 버전(Swift Programming Language Guide on Collection Types)에 대한 현재 답변은 Set 항목을 다음과 같이 반복하는 것으로 보입니다.

for item in myItemSet {
   ...
}

또는 "정렬된" 방법을 사용하려면:

let itemsArray = myItemSet.sorted()

Swift 설계자들은 세트가 실제로 주문되지 않았기 때문에 액세스 메커니즘으로 모든 Objects를 좋아하지 않은 것 같습니다. 그래서 그들은 당신이 명시적인 주문을 적용하지 않고 배열을 추출하지 않았는지 확인하기를 원했습니다.

정렬의 오버헤드를 원하지 않고 순서를 신경쓰지 않는다면, 저는 보통 배열을 추출하는 데 조금 더 빠를 지도나 flatMap 방법을 사용합니다.

let itemsArray = myItemSet.map { $0 }

이는 세트가 보유한 유형의 어레이를 구축합니다. 특정 유형의 어레이가 필요한 경우(예: 유형 세트로 선언되지 않은 관리되는 개체 관계 집합의 권한) 다음과 같은 작업을 수행할 수 있습니다.

var itemsArray : [MyObjectType] = []
if let typedSet = myItemSet as? Set<MyObjectType> {
 itemsArray = typedSet.map { $0 }
}

이 메소드를 호출하고 집합을 전달합니다.

func getArrayFromSet(set:NSSet)-> NSArray {

return set.map ({ String($0) })
}

이와 같은 내용:

var letters:Set = Set<String>(arrayLiteral: "test","test") // your set
print(self.getArrayFromSet(letters))

언급URL : https://stackoverflow.com/questions/29046695/swift-set-to-array

반응형