2017-02-17 52 views
-1

我正在過濾一個數組,其中有多個具有相同名稱的模型,只有它們具有不同的型號。刪除結構數組中重複的數據

變量

var modelArray = [model]() 

STRUCT

struct model { 
    var modelName = String(); 
    var modelNumber = String(); 
    var manufacturer = String(); 
    var phiTypeCode = String(); 
    var phiTypeDesc = String(); 
} 

過濾

var filteredArray = self.modelArray.filter { $0.manufacturer.range(of: manufacturerVar, options: .caseInsensitive) != nil } 

這產生正確的過濾器ed Array,只是由於具有不同型號的類似型號的可能性,我試圖從filteredArray刪除重複項。 Swift相當新穎,我沒有很多經驗使得struct可以使用建議的解決方案。

希望這更清晰

+0

你是如何保存數據?數據來自哪裏? – MwcsMac

+3

「我得到重複值」消除重複值很容易,但是,您是什麼意思「我正在得到」?你在那裏輸入重複值。如果你不想讓他們在那裏,不要這樣做。 – matt

+0

@JLanders在一個不相關的說明中,是否有一個名爲'「」',由'「」製造,並且沒有phyType代碼或Desc的模型? – Alexander

回答

2

首先,我試着在我的PlayGround中製作一個樣本。

  1. 順應模型model到protocal Equatable,就像這樣:

    struct Car: Equatable { 
    
        var modelName = String() 
        var manufacturer = String() 
    
        init(modelName: String, manufacturer: String) { 
         self.modelName = modelName 
         self.manufacturer = manufacturer 
        } 
    
        static func == (lhs: Car, rhs: Car) -> Bool { 
         return lhs.modelName == rhs.modelName 
        } 
    } 
    

在上面的代碼中,我們假設modelName是模型的主鍵。

  • 現在使得枚舉數據源並且由一個檢查元件一個後返回一個新的數據源,像這樣的函數:

    // returns unique array 
    
    func unique(cars: [Car]) -> [Car] { 
    
        var uniqueCars = [Car]() 
    
        for car in cars { 
         if !uniqueCars.contains(car) { 
          uniqueCars.append(car) 
         } 
        } 
    
        return uniqueCars 
    } 
    
  • 最後,您現在可以生成一個新的唯一數據源。

    例子:

    // Variable 
    
    var cars = [Car]() 
    
    // Adding data models to data source 
    
    let car1 = Car(modelName: "Kia Picanto", manufacturer: "Kia") 
    let car2 = Car(modelName: "Honda XX", manufacturer: "Honda") 
    let car3 = Car(modelName: "Honda XX", manufacturer: "Honda") 
    
    cars.append(car1) 
    cars.append(car2) 
    cars.append(car3) 
    
    // Now contains only two elements. 
    let uniqueCars = unique(cars: cars) 
    
    +0

    這是完美的!感謝您花時間詳細瞭解 – JLanders

    +0

    當然,不客氣。現在,您可以在向數據源添加元素之前使用相同的函數'contains'。祝你好運。 – Glenn