Swift-24-集合对象

概述

在了解正式内容之前可以先回顾下objectiveC中提供的集合特性。
在这里插入图片描述
它的特点是,拿NSArray举例,包含NSArray 和 NSMutableArray两个API,前者是不可变数组,一旦创建其值和数量就不能改变了;NSMutableArray是可变数组,继承了NSArray,数组对象相当于java中的list(有序集合),这里的有序是指放入的顺序,并不是数据真实的排序。NSArray数组对象的索引也是从0开始的。

那么Swift的集合就简单的多了,如下:
在这里插入图片描述
它也有可变和不可变之分,但是是用var或let来决定的。

集合详解

数组Array

数组是值的有序集合,任何值都可以在数组中出现多次。数组通常用于值的有序很重要或者很有用的场合,但是值的顺序是否有意义并不是先决条件。与Objective-C不同的是,Swift的Array类型可以持有任何类型的值(对象和非对象都可以),而Objective-C的数组只能存储对象类型,基本类型需要用[]这种方式存放。

同样的可变和不可变由var或let来决定。

创建数组

以下三种定义等价的,这种有点类似于java的实现方法。

//这种方式比较直观,个人比较推荐。可能和笔者从事多年java开发养成的习惯吧。
var bucketList: Array<String> = ["Climb Mt. Everest"] 
var bucketList1:[String] = ["Climb Mt. Everest"]
var bucketList2 = ["Climb Mt. Everest"]

数组操作

包括索引和追加等操作。

import Foundation

// Mutable arrays
var bucketList = ["1"]
var newItems = ["2", "3", "4", "5", "6"]

//相加 ~~ bucketList = ["1", "2", "3", "4", "5", "6"]
bucketList += newItems

//删除:按索引删除单个元素,返回 3,当前bucketList = ["1", "2", "4", "5", "6"]
bucketList.remove(at: 2)

//长度 5
print(bucketList.count)

//取值:区间取值 2,4, 5
print(bucketList[1...3])

//修改:修改某个元素的值,此时索引为2的元素由4变成 4 7
bucketList[2] += " 7"

//插入:插入一个值
bucketList[0] = "8"

//插入:插入一个值,此时bucketList = ["8", "2", "9", "4 7", "5", "6"]
bucketList.insert("9", at: 2)

//追加, bucketList = ["8", "2", "9", "4 7", "5", "6", "10"]
bucketList.append("10")

//可变数组
var myronsList = [
                  "Climb Mt. Kilimanjaro",
                  "Fly hot air balloon to Fiji",
                  "Toboggan across Alaska",
                  "Go on a walkabout in Australia",
                  "Scuba dive in the Great Blue Hole",
                  "Find a triple rainbow"
                 ]

//判断相等,false
let equal = (bucketList == myronsList)

//不可变数组
let lunches = ["Cheeseburger",
               "Veggie Pizza",
               "Chicken Caesar Salad",
               "Black Bean Burrito",
               "Felafel wrap"
              ]

字典Dictionary

字典是一个比较经典的设计,每种编程语言中都有,它是一种键值对存储的结构,其key可以是string、int、float甚至bool。 其语法:var dict: Dictionary<Key, Value>。下列的实现方式都是合理。

创建字典

var dict1: Dictionary<String, Double> = [:]
var dict2 = Dictionary<String, Double>()
var dict3: [String:Double] = [:]
var dict4 = [String:Double]()

字典操作

主要包括增加、修改、删除和遍历几种

var movieRatings = ["Donnie Darko": 4, "Chungking Express": 5, "Dark City": 4]

//字典长度 ~~ I have rated 3 movies.
print("I have rated \(movieRatings.count) movies.")

//读取:取值 ~~4
let darkoRating = movieRatings["Donnie Darko"]

//修改:修改或添加新值~~5
movieRatings["Dark City"] = 5

//修改:这种方法会返回老的值 ~~ Old rating: 4; current rating: 5
let oldRating: Int? = movieRatings.updateValue(5, forKey: "Donnie Darko")

if let lastRating = oldRating, let currentRating = movieRatings["Donnie Darko"] {
    print("Old rating: \(lastRating); current rating: \(currentRating)")
}

//删除,下面两种方法等价,只不过=nil不会返回被删除元素的值
let removedRating: Int? = movieRatings.removeValue(forKey: "Dark City")
movieRatings["Dark City"] = nil

//遍历,ENTRY,只输出The movie Donnie Darko was rated: 5.和The movie Chungking Express was rated: 5.
for (key, value) in movieRatings {
    print("The movie \(key) was rated: \(value).")
}

//遍历, key和value
for movie in movieRatings.keys {
    print("User has rated \(movie).")
}

for movie in movieRatings.values {
    print("User has rated \(movie).")
}

//dict 与 Array
let watchedMovies = Array(movieRatings.keys)
let georgia = ["Cobb": [30301,30302,30303,30304,30305],
               "Dekalb": [30306,30307,30308,30309,30310],
               "Fulton": [30311,30312,30313,30314,30315]
               ]
var zipcodes: [Int] = []
for zipcodeArray in georgia.values {
    for zipcode in zipcodeArray {
        zipcodes.append(zipcode)
    }
}
//Georgia has the following zip codes: [30306, 30307, 30308, 30309, 30310, 30301, 30302, 30303, 30304, 30305, 30311, 30312, 30313, 30314, 30315]
print("Georgia has the following zip codes: \(zipcodes)")

集合Set

这个没啥好说的,它存储的是值,并且值不能重复。

创建集合

大概有下列三种创建集合的方法。

var groceryBag = Set<String>()

//直接初始化
var groceryBag = Set(["Apples", "Oranges", "Pineapple"])

//这种写法借鉴了Array
var groceryBag:Set = ["Apples", "Oranges", "Pineapple"]

常规操作

常归的增加、删除、查询操作;

var groceryBag = Set<String>()

//插入:
groceryBag.insert("Apples")
groceryBag.insert("Oranges")
groceryBag.insert("Pineapple")

//查询
let hasBananas = groceryBag.contains("Bananas")

//遍历
for food in groceryBag {
    print(food)
}

集合操作

它还有集合所特有的交集、并集等操作

var groceryBag:Set = ["Apples", "Oranges", "Pineapple"]
//合并两个不同的集合
let friendsGroceryBag = Set(["Bananas", "Cereal", "Milk", "Oranges"])
//{"Oranges", "Apples", "Milk", "Pineapple", "Bananas", "Cereal"}
let commonGroceryBag = groceryBag.union(friendsGroceryBag)

//求两个集合的交集
let roomatesGroceryBag = Set(["Apples", "Bananas", "Cereal", "Toothpaste"])
//{"Cereal", "Apples", "Bananas"}
let itemsToReturn = commonGroceryBag.intersection(roomatesGroceryBag)

//不相交,判断两个集合是否有值相同,如果有任意的一个值相同则返回false
let yourSecondBag = Set(["Berries", "Yogurt"])
let roommatesSecondBag = Set(["Grapes", "Honey"])
//true
let disjoint = yourSecondBag.isDisjoint(with: roommatesSecondBag)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tableau基础学习——添加标靶图、甘特图、瀑布图

标靶图 添加参考线 添加参考分布 甘特图 创建新的字段 如设置延迟天数****计划交货日期-实际交货日期 为正代表提前交货&#xff0c;负则代表延迟交货 步骤&#xff1a;创建——计算新字段 把延迟天数放在颜色、大小里面就可以 瀑布图 两个表按照地区连接 先做个条形图&…

工业4.0的基石:探索工业级光模块的力量

引言 工业4.0代表着智能制造的新时代&#xff0c;而工业级光模块则是这一革命性转变的基石。这些高科技组件不仅是现代通信网络的核心&#xff0c;更是连接智能工厂、智慧城市和远程服务的关键。本文将深入探讨工业级光模块的技术特性、应用领域以及它们如何塑造未来工业的面貌…

公司网页制作需要多少钱

公司网页制作需要多少钱&#xff1f;这是一个非常常见的问题。答案取决于您需要的功能和设计。一些小型企业网站可能只需要一些基本的功能&#xff0c;花费可能低至几百美元&#xff0c;而一些大型企业网站可能需要高级功能和设计&#xff0c;可能需要几万美元。 以下是一些考虑…

js如何获取对象的属性值

获取对象的属性值&#xff0c;有两种方式。 方式一&#xff1a; 对象.属性名 let obj {name:张三,age:23 }; console.log(obj.name); //张三方式二&#xff1a; 对象[属性名] let obj {name:张三,age:23 }; console.log(obj[name]); //张三 两种方式有什么不同&am…

Mac安装telnet

一、安装Homebrew 1、打开官网&#xff1a;Homebrew — The Missing Package Manager for macOS (or Linux) 2、打开终端输入&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装Telnet bre…

内容策略的精准定位:Kompas.ai的目标受众分析

在这个信息爆炸的时代&#xff0c;内容营销已经成为品牌与消费者沟通的重要桥梁。然而&#xff0c;随着内容的海量增长&#xff0c;品牌如何从众多信息中脱颖而出&#xff0c;成为营销人员面临的巨大挑战。精准定位目标受众&#xff0c;不仅能够帮助品牌更有效地传达信息&#…

nginx 的漏洞改造

Nginx 的漏洞扫描有很多整改项 资源下载地址&#xff1a;https://download.csdn.net/download/wangzhi291/89216805 资源里面需要conf/modules 需要上传 然后docker镜像文件 配置按下面的修改就行了 整改方法为增加 ngx_http_headers_more_filter_module模块 include /usr…

贪吃蛇详解

Win32 API介绍&#xff1a; 在写贪吃蛇这款游戏时需要用到一些有关Win32 API的知识&#xff0c; 接下来我会将设计到的知识点列举并讲解&#xff1a; 首先我们先了解一下Win32 API是什么&#xff0c;Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&am…

Unity射线实现碰撞检测(不需要rigbody组件)

使用physic.CapsulCast&#xff08;&#xff09;&#xff1b; 前面3个参数生成一个胶囊体&#xff0c; 向着发射方向&#xff0c;发射出一串的胶囊&#xff08;没有最大距离&#xff09; 有最大距离&#xff0c;可以节约性能开销。 physic.CapsulCast&#xff08;&#xff0…

类的六个构造函数相关干货

构造函数 特点 1.名字与类名相同 2.无返回值 3.对象实例化的时候编译器自动调用这个函数 4.构造函数可以重载&#xff08;无参构造函数&#xff0c;拷贝构造等&#xff09; 5.如果类中没有显式定义构造函数&#xff08;深拷贝&#xff09;&#xff0c;则编译器会自动生成一个…

IP地址查询API接口怎么对接

IP地址查询API接口又叫IP归属地信息查询API接口&#xff0c;指的是根据IP地址查询归属地定位信息&#xff0c;包含国家、省、市、街道和运营商、区号、邮编、坐标等信息。那么IP地址查询API接口该怎么对接呢&#xff1f; 首先我们找到一家有做IP归属地信息查询API接口的服务商…

Python程序设计教案

文章目录&#xff1a; 一&#xff1a;软件环境安装 第一个软件&#xff1a;pycharm 第二个软件&#xff1a;thonny 第三个软件&#xff1a;IDIE&#xff08;自带的集成开发环境&#xff09; 二&#xff1a;相关 1.规范 2.关键字 3.Ascll码表 三&#xff1a;语法基础…

【学习】如何高效地进行集成测试

在软件开发的过程中&#xff0c;测试环节至关重要。而在这其中&#xff0c;集成测试更是保证软件质量的关键步骤之一。本文将探讨如何高效地进行集成测试&#xff0c;以确保软件的稳定性和可靠性。 一、什么是集成测试 集成测试是指在单元测试的基础上&#xff0c;将模块按照设…

JavaScript进阶知识点及案例(续)

编程思想 面向过程介绍 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步的实现&#xff0c;使用的时候再一个一个的依次调用就可以了 面向对象介绍 面向对象是把事务分解成为一个个对象&#xff0c;然后由对象之间分工与合作面向对象是以…

word导出或另存为pdf图片不清晰问题解决方案

问题描述&#xff1a; 使用word 2019导出pdf时图片不清晰&#xff0c;即使我已经在“选项 → \to →高级 → \to →图片大小和质量 → \to →不压缩文件中的图像 ”选项卡中关闭掉了图片压缩依然无效。 解决方案&#xff1a; 利用word foxit pdf 软件打印的方案转pdf。 &…

Linux加强篇-存储结构与管理硬盘(三)

目录 ⛳️推荐 磁盘容量配额 VDO虚拟数据优化 软硬方式链接 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 磁盘容量配额 使用磁盘容量配额服务来限制某位用户或某个用户组针…

Java 笔记 07:包机制,JavaDoc 文档的生成方式,Math 工具类,以及字符串连接符相关内容

一、前言 记录时间 [2024-04-25] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 04&#xff1a;Java 数据类型基础&#xff0c;数据类型转换&#xff0c;及其相关场景拓展 Java 笔记 05&#xff1a;变量和常量相关知…

第55篇:创建Nios II工程之Hello_World<一>

Q&#xff1a;本期我们开始介绍创建Platform Designer系统&#xff0c;并设计基于Nios II Processor的Hello_world工程。 A&#xff1a;设计流程和实验原理&#xff1a;需要用到的IP组件有Clock Source、Nios II Processor、On-Chip Memory、JTAG UART和System ID外设。Nios I…

Golang | Leetcode Golang题解之第48题旋转图像

题目&#xff1a; 题解&#xff1a; func rotate(matrix [][]int) {n : len(matrix)// 水平翻转for i : 0; i < n/2; i {matrix[i], matrix[n-1-i] matrix[n-1-i], matrix[i]}// 主对角线翻转for i : 0; i < n; i {for j : 0; j < i; j {matrix[i][j], matrix[j][i]…

2024采用JSP的酒店客房管理系统源代码+毕业设计论文+开题报告+答辩PPT

点击下载源码 摘 要 计算机技术发展至今已走过了半个多世纪之久&#xff0c;现在各个阶层、各个领域都使用着计算机&#xff0c;在这个快节奏的时代中它已经成为了社会生活的必需品。它的出现是现代社会进步&#xff0c;科技发展的标志。同时现代化的酒店组织庞大&#xff0c;…