在java中我们有:
private Set<AutoComplete> hashList = new LinkedHashSet<>();
和
public class AutoComplete {
private String name;
private String id;
//...geters and setters
@Override
public boolean equals(Object o) {
if (o instanceof AutoComplete) {
AutoComplete autoComplete = (AutoComplete) o;
if (name.equals(autoComplete.name) && id.equals(autoComplete.id))
return true;
}
return false;
}
@Override
public int hashCode() {
int hash = 17;
int hashMultiplikator = 79;
try {
hash = hashMultiplikator * hash
+ getId().hashCode();
} catch (java.lang.Exception e) {
e.printStackTrace();
MLogger.logException("autocomplete id can't be null", e);
}
return hash;
}
然后,当您向 hashList 添加项目时,不允许重复的值,列表是排序。
所以我的问题是如何在Swift中做到这一点?!
我已经看过Does there exist within Swift's API an easy way to remove duplicate elements from an array?
了当我将AutoComplete数组传递给func uniq时,
var namesAndIds : [AutoComplete] = []
(删除重复项:)
namesAndIds.appendContentsOf(SingletonMappingContacts.sharedInstance.autoComplete)
namesAndIds = uniq(namesAndIds)
func uniq<S : SequenceType, T : Hashable where S.Generator.Element == T>(source: S) -> [T] {
var buffer = [T]()
var added = Set<T>()
for elem in source {
if !added.contains(elem) {
buffer.append(elem)
added.insert(elem)
}
}
return buffer
}
我有这个: 类型AutoComplete的值没有成员elemet
自动完成:
class AutoComplete{
var id : String
var name : String
init(id: String,name: String) {
self.name = name
self.id = id
}
}
答案 0 :(得分:0)
对于想知道的人,我最终避免像下面的duplicate insertion issue
一样。
但是这样的东西就像LinkedHashSet一样所以问题仍然存在!
我已经创建了
var namesAndIds = Set<AutoComplete>()
var finalAutoCompleteList = [AutoComplete]()
然后更正了AutoComplete类:
public class AutoComplete:NSObject{
var id : String
var name : String
init(id: String,name: String) {
self.name = name
self.id = id
}
override public func isEqual(object: AnyObject?) -> Bool {
if let object = object as? AutoComplete {
return id == object.id
} else {
return false
}
}
override public var hash: Int {
return id.hashValue
}
}
最后添加了Set to Array
finalAutoCompleteList = Array(namesAndIds)
答案 1 :(得分:-1)
在Swift中,您可以使用Set
。
与文档中一样:
集合在集合中存储相同类型的不同值,但没有 定义排序。您可以在订单时使用集合而不是数组 项目不重要,或者当您需要确保项目时 只出现一次。
类型必须是可散列的才能存储在集合中 - 也就是说,类型必须提供一种计算自身散列值的方法。
完全符合Swift标准库中的Hashable
协议。
然后你就可以使用它:
var letters = Set<Character>() //letters == []
letters.insert("a") //letters == ["a"]
letters.insert("a") //letters == ["a"] - no duplicates