如果我得到這個數組整體價值:刪除重複和陣列
[0, 0, 1, 1, 1, 2, 3, 4, 5, 5]
如何,我可以得到:
[2, 3, 4]
This answer將持有複製的價值,但我想刪除該值以及。
如果我得到這個數組整體價值:刪除重複和陣列
[0, 0, 1, 1, 1, 2, 3, 4, 5, 5]
如何,我可以得到:
[2, 3, 4]
This answer將持有複製的價值,但我想刪除該值以及。
如果要篩選僅出現1單次的數字,你可以用好老NSCountedSet
let nums = [0, 0, 1, 1, 1, 2, 3, 4, 5, 5]
let countedSet = NSCountedSet(array: nums)
let uniques = nums.filter { countedSet.count(for: $0) == 1 }
print(uniques) // [2, 3, 4]
謝謝哥們 – NoKey
請注意,您需要導入基金會使用NSCountedSet。如果你需要一個純粹的Swift解決方案來尋找一個數組的獨特元素,你可以擴展數組,限制你的元素爲Equatable協議,並檢查是否可以而不是再次查找你的元素索引檢查index(of:element)== nil使用索引(:)元素索引作爲數組片從startIndex後:
extension Array where Element: Equatable {
var uniqueElements: [Element] {
var result: [Element] = []
forEach {
if let index = self.index(of: $0),
self[self.index(after: index)..<endIndex].index(of: $0) == nil {
print("item found only once")
result.append($0)
}
}
return result
}
}
如果您正在使用的Xcode 9•斯威夫特4,並不需要保持陣列原來的順序,你可以利用新的字典初始值設定程序字典(grouping:,by :),並過濾鍵值等於1的鍵:
extension Array where Element: Hashable {
var uniqueElements: [Element] {
return Dictionary(grouping: self, by: { $0 })
.flatMap{ $1.count == 1 ? $0 : nil }
}
}
遊樂場測試
let numbers = [0, 0, 1, 1, 1, 2, 3, 4, 5, 5]
numbers.uniqueElements // [4, 2, 3]
如果你需要保持陣列順序可以算元素出現如本answer和過濾事件等於一:
extension Array where Element: Hashable {
var uniqueElementsOrdered: [Element] {
return filter{ occurrences[$0] == 1 }
}
var occurrences: [Element:Int] {
return Dictionary(grouping: self, by: {$0})
.mapValues{ $0.count }
}
}
遊樂場te蜇
let numbers = [0, 0, 1, 1, 1, 2, 3, 4, 5, 5]
numbers.uniqueElementsOrdered // [2, 3, 4]
謝謝,我將使用擴展! – NoKey
比較https://stackoverflow.com/q/41272542/2976878 – Hamish