亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在SWIFT中從數組中刪除重復元素

在SWIFT中從數組中刪除重復元素

慕碼人8056858 2019-06-18 16:54:29
在SWIFT中從數組中刪除重復元素我可能有一個數組,如下所示:[1, 4, 2, 2, 6, 24, 15, 2, 60, 15, 6]或者,真的,任何類似類型的數據序列。我要做的是確保每個相同的元素中只有一個。例如,上面的數組將變成:[1, 4, 2, 6, 24, 15, 60]注意,刪除了2、6和15的副本,以確保每個相同的元素中只有一個。SWIFT提供了一種很容易做到的方法,還是我必須自己去做?
查看完整描述

3 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

你可以自己滾,比如這樣(用SET更新SWIFT1.2):

func uniq<S : SequenceType, T : Hashable where S.Generator.Element == T>(source: S) -> [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]

SWIFT 3版本:

func uniq<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}


查看完整回答
反對 回復 2019-06-18
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

查看完整回答
反對 回復 2019-06-18
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

這里有很多答案,但我忽略了這個簡單的擴展,適用于SWIFT 2和更高版本:

extension Array where Element:Equatable {
    func removeDuplicates() -> [Element] {
        var result = [Element]()

        for value in self {
            if result.contains(value) == false {
                result.append(value)
            }
        }

        return result    }}

讓它變得超級簡單??梢赃@樣稱呼:

let arrayOfInts = [2, 2, 4, 4]print(arrayOfInts.removeDuplicates()) // Prints: [2, 4]

基于屬性的濾波

要根據屬性篩選數組,可以使用以下方法:

extension Array {

    func filterDuplicates(@noescape includeElement: (lhs:Element, rhs:Element) -> Bool) -> [Element]{
        var results = [Element]()

        forEach { (element) in
            let existingElements = results.filter {
                return includeElement(lhs: element, rhs: $0)
            }
            if existingElements.count == 0 {
                results.append(element)
            }
        }

        return results    }}

如下所示:

let filteredElements = myElements.filterDuplicates { $0.PropertyOne == $1.PropertyOne && $0.PropertyTwo == $1.PropertyTwo }


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 1454 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號