Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何基于id从swift上的对象数组中删除元素?_Arrays_Swift - Fatal编程技术网

Arrays 如何基于id从swift上的对象数组中删除元素?

Arrays 如何基于id从swift上的对象数组中删除元素?,arrays,swift,Arrays,Swift,我有一个对象数组,例如 var arrStudents = [S1,S2,S3,S4,S5] 这里s1是学生课堂的对象 class Student { var id:Int! var name:String! var address:String? var phone:Int! } 现在我想按学生id从数组中删除一条记录。请告诉我如何执行此操作 此外,我还想学习使用filter、map的所有数组操作。循环遍历数组的所有索引,并检查是否要删除匹配的id,如果是

我有一个对象数组,例如

var arrStudents = [S1,S2,S3,S4,S5]
这里s1是学生课堂的对象

class Student {

    var id:Int!
    var name:String!
    var address:String?
    var phone:Int!
}
现在我想按学生id从数组中删除一条记录。请告诉我如何执行此操作


此外,我还想学习使用filter、map的所有数组操作。

循环遍历数组的所有索引,并检查是否要删除匹配的id,如果是,它将过滤掉,您可以删除该索引:-)

如果您想在一次迭代中删除多个值,您应该从最后一个索引到第一个索引开始循环,这样它就不会崩溃(越界错误)


循环遍历数组的所有索引,检查要删除的id是否匹配,如果匹配,它将过滤掉,您可以删除该索引:-)

如果您想在一次迭代中删除多个值,您应该从最后一个索引到第一个索引开始循环,这样它就不会崩溃(越界错误)


第一个Veriables名称应为小写

只需使用property
id
在数组中搜索搜索元素的索引,然后将其从student数组中删除即可

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)
}
要学习,请参考以下示例:


  • 第一个Veriables名称应为小写

    只需使用property
    id
    在数组中搜索搜索元素的索引,然后将其从student数组中删除即可

    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)
    }
    
    要学习,请参考以下示例:


  • 以小写字母开头命名类实例是Swift的惯例。顺便说一句,你应该尽可能避免使用隐式展开的选项,特别是如果你不了解选项是如何工作的。您所需要的只是为类提供一个自定义初始值设定项,或者只使用一个结构而不是一个不需要您实现初始值设定项的类。注意,您应该将电话属性定义为字符串类型
    ,我想学习所有数组操作
    -互联网上有很多关于此的教程。下面我们来讨论具体的问题。感谢您的宝贵反馈@Leodabus可能是Swift惯例的重复,以小写字母开头命名您的类实例。顺便说一句,你应该尽可能避免使用隐式展开的选项,特别是如果你不了解选项是如何工作的。您所需要的只是为类提供一个自定义初始值设定项,或者只使用一个结构而不是一个不需要您实现初始值设定项的类。注意,您应该将电话属性定义为字符串类型
    ,我想学习所有数组操作
    -互联网上有很多关于此的教程。在这里,我们将讨论具体问题。感谢您的宝贵反馈@Leodabus可能重复的代码,不鼓励回答。顺便说一句,Swift是一种类型推断语言。无需显式设置类型<代码>自身是冗余的。temp对象声明在哪里?对不起,仍然是objective-c风格,与self保持一致。感谢您的评论:-)不鼓励使用代码型答案。顺便说一句,Swift是一种类型推断语言。无需显式设置类型<代码>自身是冗余的。temp对象声明在哪里?对不起,仍然是objective-c风格,与self保持一致。感谢您的评论:-)
    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)
        }