2016-08-31 4 views

答えて

1

アレイの拡張機能は、これを実行するために作成することができます。

extension Array where Element : Equatable{ 

    public mutating func mergeElements<C : CollectionType where C.Generator.Element == Element>(newElements: C){ 
     let filteredList = newElements.filter({!self.contains($0)}) 
     self.appendContentsOf(filteredList) 
    } 
} 

もちろん、Equatable要素にのみ有効です。

7

は、単に:

let unique = Array(Set(a + b)) 
+0

Althoこれは、ちょうど考えエレガントであるから省略するオブジェクトの配列です。 - let unique = Array(Set(a + b))。sort() 'は良く見えるでしょう... – Dravidian

4

これは、一般的に使用スウィフトに可能であるunion、呼ばれSet

その後
let a = [1, 2, 3] 
let b = [3, 4, 5] 

let set = Set(a) 
let union = set.union(b) 

あなただけの配列にセットを変換することができます:

let result = Array(union) 
+3

アイディアははっきりしていますが、例はコンパイルされません。また、 'union' *は新しいセットを返し、受信者は変更しません。 –

+0

@MartinRああ、あなたは正しいです。それは私がクイックコピー/ペーストのために得たもので、修正されました。 – Bryan

2

スウィフト3.0受け入れられた回答のバージョン。

extension Array where Element : Equatable{ 

    public mutating func mergeElements<C : Collection>(newElements: C) where C.Generator.Element == Element{ 
    let filteredList = newElements.filter({!self.contains($0)}) 
    self.append(contentsOf: filteredList) 
    } 

} 

注:価値関数に渡される配列は、最終的な配列から除外されるオブジェクトの配列であることをここで言って。重要:Equatableのプロパティが同じであるかもしれないが、他は異なるかもしれないオブジェクトの配列をマージする場合、重要です。

1

スイフト4.0版に述べたよう

extension Array where Element : Equatable { 

    public mutating func mergeElements<C : Collection>(newElements: C) where C.Iterator.Element == Element{ 
    let filteredList = newElements.filter({!self.contains($0)}) 
    self.append(contentsOf: filteredList) 
    } 

} 

:関数に渡された配列が最終アレイ

関連する問題