[解決済み】Swiftで配列から重複する要素を削除する
2022-03-27 17:38:48
質問
以下のような配列があるかもしれません。
[1, 4, 2, 2, 6, 24, 15, 2, 60, 15, 6]
あるいは、同じようなタイプのデータ部分の連続でも構いません。私がしたいのは、同じ要素がそれぞれ1つだけ存在することを保証することです。例えば、上記の配列は次のようになる。
[1, 4, 2, 6, 24, 15, 60]
2、6、15 の重複が削除され、同一の要素がそれぞれ1つだけ存在することが確認されたことに注意してください。Swiftはこれを簡単に行う方法を提供していますか、それとも自分で行わなければならないのでしょうか?
どのように解決するのですか?
例えばこんな風に、自分でロールバックすることができます。
func unique<S : Sequence, T : Hashable>(source: S) -> [T] where S.Iterator.Element == T {
var buffer = [T]()
var added = Set<T>()
for elem in source {
if !added.contains(elem) {
buffer.append(elem)
added.insert(elem)
}
}
return buffer
}
let vals = [1, 4, 2, 2, 6, 24, 15, 2, 60, 15, 6]
let uniqueVals = uniq(vals) // [1, 4, 2, 6, 24, 15, 60]
また、拡張機能として
Array
:
extension Array where Element: Hashable {
func uniqued() -> Array {
var buffer = Array()
var added = Set<Element>()
for elem in self {
if !added.contains(elem) {
buffer.append(elem)
added.insert(elem)
}
}
return buffer
}
}
あるいはもっとエレガントに(Swift 4/5)。
extension Sequence where Element: Hashable {
func uniqued() -> [Element] {
var set = Set<Element>()
return filter { set.insert($0).inserted }
}
}
どちらが使われるでしょうか。
[1,2,4,2,1].uniqued() // => [1,2,4]
関連
-
[解決済み] JSON配列のプッシュ
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】Swiftで配列から要素を削除する方法
-
[解決済み】配列とリンクリストの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] C言語で**は何をするのですか?[重複しています]
-
[解決済み] VBAでの文字列配列の宣言と初期化
-
[解決済み] PowerShellの配列から重複する値を削除する
-
[解決済み】Swiftで配列を連結またはマージするにはどうすればよいですか?
-
[解決済み】Swiftで配列から要素を削除する方法
-
[解決済み】KotlinのList型とArray型の違いについて
-
[解決済み】Bashでスペースで区切られた文字列を配列に読み込む
-
[解決済み】配列/配列リストよりリンクリストを使用するのはいつ?
-
[解決済み】Swiftで型付き配列を拡張するにはどうすればいいですか?
-
[解決済み】mongodbで複数の配列要素を更新する方法