我有一个对象数组,格式如下。
var arrStudents = [S1,S2,S3,S4,S5]
这里的s1是学生类的对象
class Student {
var id:Int!
var name:String!
var address:String?
var phone:Int!
}
现在我想通过学生ID从数组中删除一条记录,请告诉我如何做到这一点。
我有一个对象数组,格式如下。
var arrStudents = [S1,S2,S3,S4,S5]
这里的s1是学生类的对象
class Student {
var id:Int!
var name:String!
var address:String?
var phone:Int!
}
let idToDelete = 10
if let index = arrStudents.index(where: {$0.id == idToDelete}) {
array.remove(at: index)
}
如果你想在单次迭代中删除多个值,你应该从最后一个索引开始循环,这样就不会崩溃(越界错误)。
var idsToDelete = [10, 20]
for id in idsToDelete {
for (i,str) in arrStudents.enumerated().reversed()
{
if str.id == id
{
arrStudents.remove(at: i)
}
}
}
index(where:)
现在已经被弃用。新的方法是firstIndex(where:)
。 - JonyMateosindex(where:)
现在已被弃用。新的方法是 firstIndex(where:)
- undefinedid
搜索要查找的元素在数组中的索引,然后将其从学生数组中删除。var arrStudents = [s1, s2, s3, s4, s5]
if let index = arrStudents.index(where: {$0.id == 1}) // Search id = 1 you can set any value
{
arrStudents.remove(at: index)
}
学习请参考以下示例:
struct Stu {
let id: Int
let name: String
}
let stu1 = Stu(id: 1, name: "Tom")
let stu2 = Stu(id: 2, name: "Jhon")
var arrString: [Stu] = [stu1, stu2]
//filter will give you an array with the matched value
let matchedObjectFromArray = arrString.filter { (obj) -> Bool in
return obj.id == 1 //return Stu object whose id = 1
}
//index method gives index of object if found in an array otherwise gives nil
if let indexOfObject = arrString.index(where: { (obj) -> Bool in
return obj.id == 2 // return index of Stu object whose id = 2
}) {
let removedObject = arrString.remove(at: indexOfObject)
print(removedObject.id)
}