
いつもお世話になります。
配列から重複している値を取り出す際に簡潔な方法はないでしょうか?
swift
1let array = ["A", "B", "B", "B", "C", "D", "D"] 2 3// => 重複している配列要素 = ["B", "D"] を取得したい。 4
現状は、下記のような考え方ですすめていて、面倒だなと…。
swift
1 2let array = ["A", "B", "B", "B", "C", "D", "D"] 3 4//重複要素を除去する 5let orderSet = NSOrderedSet(array: array) 6let uniqueArray = orderedSet.array as! [String] 7 8print(uniqueArray) // => ["A", "B", "C", "D"] 9 10/* 11arrayの要素["A", "B", "B", "B", "C", "D", "D"] から 12uniqueArrayの要素["A", "B", "C", "D"]を1つづつ削除していく。 13*/ 14 15// => ["B","B","D"] 16 17// もう一度重複要素を除去する => ["B", "D"] 18 19
解決方法&備忘録
その1
swift
1let array = ["A", "B", "B", "B", "C", "D", "D"] 2 3// 重複している要素の取得 4var set = Set<String>() 5let duplicatedEArray = NSOrderedSet(array: array.filter { !set.insert($0).inserted }).array as! [String] 6// => ["B", "D"] 7 8// ユニークな要素の取得 9let noDuplicatedArray = NSOrderedSet(array: array).array as! [String] 10let UniqueEArray = noDuplicatedArray.filter{ v in return !duplicatedEArray.contains(v) } 11// => ["A", "C"]
その2
swift
1let array = ["A", "B", "B", "B", "C", "D", "D"] 2 3// 重複している要素の取得 4let duplicatedEArray = Array(Dictionary(grouping: array) {$0}.filter {$0.value.count > 1}.keys) 5// => ["B", "D"] 6 7// ユニークな要素の取得 8let UniqueEArray = Array(Dictionary(grouping: array) {$0}.filter {$0.value.count == 1}.keys) 9// => ["A", "C"]

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/08/07 08:31 編集
2018/08/07 08:31 編集
退会済みユーザー
2018/08/07 08:32 編集
2018/08/07 08:34
退会済みユーザー
2018/08/07 08:36