2016-02-02 52 views
0

首先,我們都知道找到一個數組的索引很容易,但我得到了一個包含多個結構的數組中的項目索引。如何在Swift中的類的數組中找到項的索引?

這是我的課:

class Patient{ 
private var id: Int 
private var name: String 
private var gender: String 
private var mileage: Double 

//global variable 
var globalPatientID:Int{ 
    return id 
} 
var globalPatientName:String{ 
    return name 
} 
var globalPatientGender:String{ 
    return gender 
} 
var globalPatientMileAge:Double{ 
    return mileage 
} 

init(id:Int, name:String, gender:String, mileage:Double){ 
    self.id = id 
    self.name = name 
    self.gender = gender 
    self.mileage = mileage 
    } 
} 

這是我的數組:

let AppUserID = prefs.objectForKey("AppUserID") 

     for var i=0; i<nou; ++i{ 
      numberOfUsersExisting = nou 

      if (AppUserID as? String == json[0][i]["App_ID"].stringValue){ 
       print("Assigning AppUserID") 
       appUserMileage = json[0][i]["Mileage"].doubleValue 
      } 

      pSample += [Patient(id: json[0][i]["ID"].intValue, name: json[0][i]["Name"].stringValue, gender: json[0][i]["Gender"].stringValue, mileage: json[0][i]["Mileage"].doubleValue)] 

      pSample.sortInPlace({$0.globalPatientMileAge < $1.globalPatientMileAge}) 
     } 

所以pSample最初是空白的陣列,它通過一個循環追加一類的物品。

sortInPlace函數幫助我對基於globalPatientMilaAge的pSample進行排序。

所以這讓我想到,我怎麼從類的數組中獲得我的AppUserID的索引(我把它作爲一個字符串)?

我試過使用這個函數,但它似乎不工作,因爲我循環類而不是類內的項目。

appUserRanking = pSample.indexOf("\(AppUserID)") 
+1

什麼是私人和公共的目的屬性?如果你想擁有隻讀屬性,只需將屬性聲明爲常量。 – vadian

+0

爲了將來的參考,現在的問題是如何從結構數組中獲取索引... –

回答

5

indexOf主體可以是像mapfilter功能關閉

appUserRanking = pSample.indexOf{$0.globalPatientID == AppUserID} 

PS:這是非常低效得到一來自json的對象(json[0][i])重複6次循環。
分配對象變量

let object = json[0][i] 

,並用它例如

if (AppUserID as? String == object["App_ID"].stringValue){ 
+0

是的,它確實非常不足以通過循環來獲得一個對象,所以我實際上在循環之後使用該函數,並且它做得很好。 –

1

不喜歡這樣,

let pSampleFiltered = pSample.filter {$0.globalPatientID == AppUserID} 
if pSampleFiltered.count > 0 { 
    if let index = pSample.indexOf(pSampleFiltered.first!) { 
     // Do your stuff here 
    } 
} 
+0

過濾整個列表效率不高。帶閉合參數的indexOf是更好的解決方案。 – titaniumdecoy

0

在斯威夫特3和上面的映射是這樣的

appUserRanking = pSample.index(where: {$0.globalPatientID == AppUserID}) 
相關問題