4

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でこれを行う方法ですか?!

私はすでに見ました 配列から重複した要素を削除する簡単な方法が Swift の API 内に存在しますか?

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 の値にはメンバー要素がありません

オートコンプリート:

class AutoComplete{
    var id : String
    var name : String
    init(id: String,name: String) {
        self.name = name
        self.id = id
    }
}
4

2 に答える 2