어레이로 신속하게 설정
안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
'programing' 카테고리의 다른 글
| ASP에서 현재 로그인한 사용자 ID를 가져오는 방법.NET 코어? (0) | 2023.05.08 |
|---|---|
| 각도 2 라우터 기본 href 세트 없음 (0) | 2023.05.08 |
| WCF 콜백을 사용하려면 어떤 단계를 거쳐야 합니까? (0) | 2023.05.08 |
| .NET 그래프 라이브러리 주변에 있습니까? (0) | 2023.05.08 |
| Bash에서 함수 인수로 공백이 있는 문자열 전달 (0) | 2023.05.08 |