如何在Swift中找到类数组中的项的索引?

时间:2016-02-02 05:37:43

标签: ios arrays swift swift2

首先,我们都知道找到一个数组的索引很容易但我找到了一个包含多个结构的数组中项目的索引。

这是我的班级:

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索引(我将其作为String转换)?

我尝试使用这个函数,但似乎没有用,因为我循环遍历类而不是类中的项。

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

3 个答案:

答案 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){

答案 1 :(得分:1)

这样做,

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

答案 2 :(得分:0)

在Swift 3及以上版本中,映射就像这样

appUserRanking  = pSample.index(where: {$0.globalPatientID == AppUserID})