Hashable/哈希协议, Arrays/数组 的使用

news2024/10/6 8:36:55

1. Hashable 模型实现哈希协议

  1.1 实现

/// Identifiable
struct MyCustomModel: Hashable{
    //let id = UUID().uuidString
    let title: String
    func hash(into hasher: inout Hasher) {
        hasher.combine(title)
    }
}

/// 哈希协议: 唯一标识值
struct HashableBootcamp: View {
    // 每个字段都有一个唯一标识
    let data: [MyCustomModel] = [
        MyCustomModel(title: "ONE"),
        MyCustomModel(title: "TWO"),
        MyCustomModel(title: "THREE"),
        MyCustomModel(title: "FOUR"),
        MyCustomModel(title: "FIVE")
    ]
    
    var body: some View {
        ScrollView {
            VStack(spacing: 40) {
                // 每个字段都有一个唯一标识
                // ForEach(data) { item in
                //     Text(item.id)
                //         .font(.headline)
                // }
                
                ForEach(data, id: \.self) { item in
                    Text(item.hashValue.description)
                        .font(.headline)
                }
            }
        }
    }
}

  1.2 效果图:

2. Arrays 数组的使用

  2.1 实现

/// 用户模型
struct UserModel: Identifiable{
    let id = UUID().uuidString
    let name: String?
    let points: Int
    let isVerified: Bool
}

/// 观察者对象
class ArrayModificationViewModel:ObservableObject{
    @Published var dataArray:[UserModel] = []
    @Published var filteredArray:[UserModel] = [] // 筛选数组
    @Published var mappedArray:[String] = [] // 字典数据
    
    init(){
        getUsers()
        updateFilteredArray()
    }
    
    /// 更新过滤数组
    func updateFilteredArray(){
        // sort 排序
        //sortedArray()
        
        // filter 筛选
        //filterArray()
        
        // map 集合
        //mapArray()
        
        // 三种操作一起使用,复杂的操作
        multipleMapArray()
    }
    
    /// 三种操作一起使用,复杂的操作
    func multipleMapArray(){
        mappedArray = dataArray.sorted(by: {$0.points > $1.points})
            .filter({$0.isVerified})
            .compactMap({$0.name})
    }
    
    /// 字典集合 转换 数组  -- 类型 转换 类型
    func mapArray() {
        //mappedArray = dataArray.map { user in
        //     return user.name ?? "Error"
        //}
        
        //mappedArray = dataArray.map({ $0.name ?? "Error" })
        
        // 对于为 nil 的名字不包含在数组中
        //mappedArray = dataArray.compactMap({ user in
        //    return user.name
        //})
        
        mappedArray = dataArray.compactMap({ $0.name })
    }
    
    /// 筛选数组  名字中包含 i :  user.name.contains("i")   验证为 true: user.isVerified
    func filterArray(){
        //filteredArray = dataArray.filter { user in
        //    return user.isVerified
        //}
        
        filteredArray = dataArray.filter({ $0.isVerified })
    }
    
    /// sort 排序数组 (降序/升序)
    func sortedArray(){
        // filteredArray = dataArray.sorted { user1, user2 in
        //    return user1.points < user2.points
        // }
        
        filteredArray = dataArray.sorted(by: { $0.points < $1.points })
    }
    
    /// 获取数据
    private func getUsers(){
        let name = ["Nick", "Chris", nil, "Emily", "Samantha", "Jason", nil, "Lisa", "Steve"]
        let points = [5, 10, 80, 12, 0, 60, 3, 18, 25]
        for index in 0 ..< name.count {
            let isVerified = index % 2 == 0 ? true : false
            let userModel = UserModel(name: name[index], points: points[index], isVerified: isVerified)
            self.dataArray.append(userModel)
        }
    }
}


/// 数组
struct ArraysBootcamp: View {
    // viewModel 层
    @StateObject var viewModel = ArrayModificationViewModel()
    var body: some View {
        ScrollView {
            VStack(spacing: 10) {
                // arrays1 对应 viewModel 中 sortedArray() 和 filterArray()
                // arrays1
                // map 1 对应 viewModel 中 mapArray() 和 multipleArray()
                map1
            }
        }
    }
    
    // 方式二: Map
    var map1: some View{
        ForEach(viewModel.mappedArray, id: \.self) { name in
            Text(name)
                .font(.title)
        }
    }
    
    // 方式一: Array
    var arrays1: some View{
        ForEach(viewModel.filteredArray) { user in
            VStack(alignment: .leading) {
                Text(user.name ?? "Error")
                    .font(.headline)
                
                HStack {
                    Text("Points: \(user.points)")
                    Spacer()
                    if user.isVerified{
                        Image(systemName: "flame.fill")
                    }
                }
            }
            .foregroundColor(.white)
            .padding()
            .background(Color.blue.cornerRadius(10))
            .padding(.horizontal)
        }
    }
}

  2.2 效果图:

    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1045067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山西电力市场日前价格预测【2023-09-27】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-27&#xff09;山西电力市场全天平均日前电价为342.48元/MWh。其中&#xff0c;最高日前电价为454.24元/MWh&#xff0c;预计出现在18: 30。最低日前电价为171.32元/MWh&#xff0c;预计…

2023 年度编程语言榜单排名揭晓,Python稳坐多项第一

随着科技的迅速发展&#xff0c;编程语言已成为现代社会不可或缺的一部分&#xff1a; 无论是网站开发、移动应用、人工智能还是嵌入式系统&#xff0c;编程语言都扮演着关键角色。 当下流行的AI人工智能大多是通过Python语言实现的。 作为AI技术框架的基础语言&#xff0c;…

华为OD机试 - 工号不够用了怎么办 - 双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

[CSCCTF 2019 Qual]FlaskLight 过滤 url_for globals 绕过globals过滤

目录 subprocess.Popen FILE warnings.catch_warnings site._Printer 这题很明显就是 SSTI了 源代码 我们试试看 {{7*7}} 然后我们就开始吧 原本我的想法是直接{{url_for.__globals__}} 但是回显是直接500 猜测过滤 我们正常来吧 {{"".__class__}} 查看当前…

项目经理如何顺利推进项目:做好任务规划,合理安排时间

在一个项目中&#xff0c;项目经理经常需面对超负荷的工作&#xff0c;并需要通过加班来达成每日的工作任务&#xff0c;他们时常需处理各种任务和大量的电子邮件。这导致项目经理在项目实施过程中&#xff0c;经常处于“救火”状态&#xff0c;而无法有效管理项目进程&#xf…

性能测试分类

一. 基准测试 二. 负载测试 通过逐步增加系统负载&#xff0c;测试系统性能的变化&#xff0c;在满足性能指标的前提下&#xff0c;系统所能承受的最大负载量的测试。 健身&#xff1a;举哑铃 10斤哑铃&#xff0c;举起10个需要15s 20斤哑铃&#xff0c;举起10个需要15s 30斤…

上海亚商投顾:沪指缩量调整 新型工业化板块掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日缩量震荡调整&#xff0c;创业板指再度跌破2000点关口。新型工业化板块掀涨停潮&#xff0c;华辰装备…

SourceTree 账号或者密码输入错误 Incorrect username or password ( access token )解决办法

修改来修改去一直解决不了&#xff0c;那就试试查看一下源文件记录的账号密码吧&#xff01;

聚势共赢!爱创科技喜获“腾讯健康年度优秀合作伙伴”!

2023年9月7日—8日&#xff0c;2023腾讯全球数字生态大会在深圳国际会展中心成功举办。来自行业的重磅院士学者、企业代表、生态伙伴等共赴大会&#xff0c;围绕“智变加速&#xff0c;产业焕新”这一活动主题进行了深层次、全方位的交流和探讨&#xff0c;共话大模型时代下数智…

华为智能企业上网行为管理安全解决方案(2)

本文承接&#xff1a; https://blog.csdn.net/qq_37633855/article/details/133339254?spm1001.2014.3001.5501 重点讲解华为智能企业上网行为管理安全解决方案的部署流程。 华为智能企业上网行为管理安全解决方案&#xff08;2&#xff09; 课程地址方案部署整体流程组网规划…

【云上探索实验室】编程范式变革进行时——CodeWhisperer实践全流程及测评分析报告

目录 一、基于LLM的辅助编程——编程范式变革进行时二、CodeWhisperer VS Code 安装与配置2.1、扩展安装2.2、配置 三、CodeWhisperer实践全流程3.1、CodeWhisperer基础实验3.2、CodeWhisperer项目实践——Web端宝可梦图鉴 四、CodeWhisperer测评分析报告4.1、功能性分析4.2、…

AI赋能的3D资产管理

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 想象一下&#xff0c;作为一名视频游戏设计师&#xff0c;你希望在游戏中使用 3D 龙模型。 以前&#xff0c;你可以通过两种方式执行此操作&#xff1a; 自己制作复杂的 3D 模型或从多个角度拍摄龙模型的照片。前往 3D 模…

远程计算机或设备不接受连接解决方法

远程计算机或设备不接受连接解决方法 点击左下角开始&#xff0c;点击运行&#xff0c;输入inetcpl.cpl&#xff0c;点击确定&#xff0c;打开Internet选项。 将三个框的勾勾去掉&#xff0c;即为不选中状态&#xff0c;点击确定。 当你的电脑浏览器不能正常上网时&#xff…

文件拖拽上传功能已经烂大街了,你还不会吗?

说在前面 &#x1f5bc;文件拖拽上传功能现在已经随处可见&#xff0c;大家应该都用过了吧&#xff0c;那么它具体是怎么实现的大家有去了解过吗&#xff1f;今天我们一起来实现一下这个功能&#xff0c;并封装一个拖拽上传组件吧。 效果展示 体验地址&#xff1a;http://jyeon…

typora+python打造舒适的文档写作环境

shigen的一大特点就是爱好折腾&#xff0c;今天上班的时候发现了一篇有趣的文章&#xff1a;TyporaMinIOPython代码打造舒适协作环境。开始还觉得不就这样吗&#xff1f;还在用minIO&#xff0c;shigen早就用上COS了&#xff01;但是接下来的设置简直是美到天&#xff0c;直接在…

求求你们别学了,已经追不上了,JDK21已经发布了

目录 引言特性介绍2.1 字符串模版&#xff08;预览版&#xff09;2.1.1 在 Java 21 字符串拼接2.1.2 JDK 21 字符串模板 2.2 顺序集合*2.2.1 SequencedCollection 接口2.2.2 SequencedSet 和 SequencedMap 类 2.3 switch语句的改进2.4 Lambda表达式的新特性2.5 Structural Patt…

Java 华为真题-新员工座位安排

需求&#xff1a; 工位由序列F1,F2…Fn组成&#xff0c;Fi值为0、1或2。其中0代表空置&#xff0c;1代表有人&#xff0c;2代表障碍物. 1、某一空位的友好度为左右连续老员工数之和 2、为方便新员工学习求助&#xff0c;优先安排友好度高的空位给出工位序列&#xff0c;求所…

Python入门之【循环语句】全网最详细!

&#x1f3c5;我是默&#xff0c;这是我的个人主页。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Python》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏都能满…

用智能文字识别技术赋能古彝文数字化之路

目录 1、前言 2、对古彝文古籍的保护迫在眉睫 3、古彝文识别的难点问题 4、古彝文文字识别的关键技术 4.1、智能高清滤镜技术 4.2、图像矫正 4.3、图像增强 4.4、版面还原 5、合合信息识别技术赋能古彝文数字化 1、前言 古彝文指的是在云南、贵州、四川等地的彝族人之…

一款免费的响应式界面调试工具

不知道大家平时开发响应式前端代码是如何调试的&#xff1f;是不是也跟我一样&#xff0c;通过浏览器的开发者工具来切换不同的界面尺寸来看验证效果呢&#xff1f; 可能是因为习惯了&#xff0c;平时就不停的切换不同尺寸来看效果。直到TJ君看到今天要推荐的这个免费工具&…