ある程度のストレスの後、次の汎用関数を作成しました。
func removeDupes<T : Hashable > (inout inputCollection : [T] ) -> [T] {
var hashMap = [T : Bool]()
var output = 0
for thing in inputCollection {
if !hashMap[thing] {
hashMap[thing] = true
inputCollection[output++] = thing
}
}
while (inputCollection.count > output) {
inputCollection.removeLast()
}
return inputCollection
}
だからあなたがするとき:
var names = ["Bob", "Carol", "Bob", "Bob", "Carol", "Ted", "Ted", "Alice", "Ted", "Alice"]
removeDupes(&names)
名前には次が含まれます: ["ボブ"、"キャロル"、"テッド"、"アリス"]
ここで、Array の拡張メソッドとして "removeDupes" を一般的に追加したいと思います。Hashable アイテムの配列になるように制約する必要があるため、構文に悩まされています。
次のように宣言できることを望んでいました。
extension Array {
func removeDupes< T : Hashable> () -> [T] {
return removeDupes(&self)
}
}
しかし、私はエラーが発生します:
配列は '@lvalue inout $T5' に変換できません
答えは「バカ野郎、こうしろ」か「無理だ」のどちらかだと思います。
どちらになりますか?:-D