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

qlckcl4x  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(241)

首先,我们都知道,查找数组的索引很容易,但是我在查找一个包含多个结构体的数组中的项的索引时遇到了困难。
"这是我的班级“

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进行排序。
这让我开始思考,如何从class的数组中获取AppUserID的索引(我将其转换为String)?
我试着使用这个函数,但是它似乎不起作用,因为我在类中循环,而不是在类中循环。

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

ecbunoof1#

indexOf的主体可以是闭包,如mapfilter函数

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

PS:在repeat循环中从json(json[0][i])获取一个对象6次是相当低效的。
将对象分配给变量

let object = json[0][i]

并以它为例

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

uujelgoq2#

这样做,

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

dly7yett3#

在Swift 3及更高版本中,Map的工作方式如下

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

相关问题