によって `Collection`プロトコルが一意になります。任意のアイデアをどのように改善するのですか? (私はハードコードさWKBackForwardListItem
とurl
一部を取り除くと、ちょうど任意のプロパティを受け入れる取得したいと思います)しかし、私は、これはまだ可能ではないかと思いますか? は、私がどんな成功せず、この拡張は、一般的な作成しようとしている要素のプロパティ
extension Collection where Iterator.Element: WKBackForwardListItem {
func unique() -> [Iterator.Element] {
var seen: [Iterator.Element] = []
for element in self {
if seen.map({ $0.url }).contains(element.url) == false {
seen.append(element)
}
}
return seen
}
}
は、理想的には、署名は、アレイ、WKWebView履歴の性質を考えると、この
func unique(by property: Property) -> [Iterator.Element] {
更新
ように終わるでしょう。配列の順序を保持することは非常に重要です。したがって、Set
の使用はすべて問題になりません。
アップデート2
結果のコードは、私がCollection
プロトコルを失った、だったが、それはこの例でokです。
extension Array where Iterator.Element: Equatable, Iterator.Element: Hashable {
func unique() -> [Iterator.Element] {
return NSOrderedSet(array: self).array as! [Iterator.Element]
}
}
ありがとうございます!
プロパティに依存するので、要素型を 'where'を使って指定する必要があります。ちょっとだけ、 'Set'にデータをロードして' contains'を使うのは、あなたのコードよりも効率的です。O(n2) – Paulw11
この関数はどうしたらいいのでしょうか?私は希望の出力を理解しているとは思わない。具体的には、 'seen.map({$ 0.url})'はあまり意味がありません。どのように見られたのですか?あるいは、 'seen.map'は毎回空の配列を返すと仮定していますか? –
メソッドの引数として* closure *(コレクション要素をプロパティにマップする)を渡します。 –