신속한 배열의 고유 값
이 질문에 이미 답변이 있습니다.
- Swift 39 답변 의 배열에서 중복 요소 제거
신속하게 iOS 앱을 구축 중이며 문자열 배열의 모든 고유 값을 가져와야합니다.
나는 애플 개발자 문서를 읽었지만 그것에 대한 기능이없는 것 같습니다.
누군가 나에게 힌트를 줄 수 있습니까?
한 가지 방법은 세트를 사용하는 것입니다.
let array = ["one", "one", "two", "two", "three", "three"]
let unique = Array(Set(array))
// ["one", "two", "three"]
배열을보다 명시 적으로 필터링하는 확장을 만들 수도 있습니다.
extension Array where Element : Equatable {
var unique: [Element] {
var uniqueValues: [Element] = []
forEach { item in
if !uniqueValues.contains(item) {
uniqueValues += [item]
}
}
return uniqueValues
}
}
노트
고유 한 배열은 지정되지 않은 순서이므로 정렬해야 할 수 있습니다. 때로는 열거하여 직접 수행하는 것이 더 낫습니다. 확장을 작성할 수 있습니다.
확장 (Swift 2)을 만드는 것이 좋습니다.
extension Array where Element : Hashable {
var unique: [Element] {
return Array(Set(self))
}
}
원하는 작업을 수행하는 더 최적화 된 방법이있을 수 있지만이 방법은 빠르고 쉽습니다.
Swift 표준 라이브러리에는이 작업을 수행하는 함수가 없지만 다음과 같이 작성할 수 있습니다.
extension Sequence where Iterator.Element: Hashable {
func unique() -> [Iterator.Element] {
var seen: [Iterator.Element: Bool] = [:]
return self.filter { seen.updateValue(true, forKey: $0) == nil }
}
}
let a = ["four","one", "two", "one", "three","four", "four"]
a.unique // ["four", "one", "two", "three"]
이것은 시퀀스의 내용을 해시 할 수 있어야한다는 단점이 있습니다. 단지 동일 할뿐만 아니라 문자열을 포함하여 대부분의 동일성이 있습니다.
또한 내용을 사전이나 세트에 넣은 다음 다시 꺼내는 것과는 달리 원래 순서를 유지합니다.
나는 내장 방식을 모른다. 이 일반 함수는 다음을 수행합니다.
func distinct<S: SequenceType, E: Equatable where E==S.Generator.Element>(source: S) -> [E]
{
var unique = [E]()
for item in source
{
if !contains(unique, item)
{
unique.append(item)
}
}
return unique
}
여기서 단점은이 솔루션이 O (n 2 ) 에서 실행된다는 것 입니다.
같은 사전을 사용하고 루프 var unique = [<yourtype>:Bool]()
와 같은 값을 입력하십시오 unique[<array value>] = true
. 이제 unique.keys
필요한 것이 있습니다.
참고 URL : https://stackoverflow.com/questions/27624331/unique-values-of-array-in-swift
'developer tip' 카테고리의 다른 글
null을 확인하고 그렇지 않은 경우 다른 값을 할당하는 가장 짧은 방법 (0) | 2020.11.19 |
---|---|
입력 IP가 특정 IP 범위에 속하는지 확인하는 방법 (0) | 2020.11.19 |
핵심 데이터 및 iOS 7 : 영구 저장소의 다른 동작 (0) | 2020.11.18 |
setx를 사용하여 Windows PATH 변수에 어떻게 추가합니까? (0) | 2020.11.18 |
Java 애플릿 매니페스트-모든 호출자 허용 코드베이스 허용 (0) | 2020.11.18 |