Log*_*gan 144
一种方法是使用一组:
let array = ["one", "one", "two", "two", "three", "three"]
let unique = Array(Set(array))
// ["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)
您还可以创建一个更明确地过滤数组的扩展:
extension Array where Element : Equatable {
var unique: [Element] {
var uniqueValues: [Element] = []
forEach { item in
if !uniqueValues.contains(item) {
uniqueValues += [item]
}
}
return uniqueValues
}
}
Run Code Online (Sandbox Code Playgroud)
注意
唯一数组将以未指定的顺序排列,您可能需要对其进行排序.有时最好通过枚举自己做,你可以写一个扩展.
进行扩展(Swift 2)可能会很好:
extension Array where Element : Hashable {
var unique: [Element] {
return Array(Set(self))
}
}
Run Code Online (Sandbox Code Playgroud)
可能有更多优化的方法来做你想要的,但这种方式快速而简单.
Air*_*ity 53
在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"]
Run Code Online (Sandbox Code Playgroud)
这有一个缺点,就是要求序列的内容是可以清除的,而不仅仅是等同的,但是大多数等同的东西都是,包括字符串.
它还保留了原始顺序,例如,将内容放在字典或集中,然后再将它们取回.
使用类似的字典并像循环var unique = [<yourtype>:Bool]()一样填写值。unique[<array value>] = true现在unique.keys有您需要的东西。
| 归档时间: |
|
| 查看次数: |
76329 次 |
| 最近记录: |