Swift--Set的了解
1. 创建和初始化一个空的set
var letters = Set<Character>()
或者,如果上下文已经提供了类型信息,例如函数参数或已输入的变量或常量,则可以创建空的集合,其中包含空数组文本:
letters.insert("a")
// letters now contains 1 value of type Character
letters = []
// letters is now an empty set, but is still of type Set<Character>
2.创建一个带有数组literal的集合
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
集合类型不能仅从数组文字推断,因此类型集必须显式声明。然而,因为Swift类型推断,如果你用一个相同类型的数组值去初始化集合时,不需要对集合设置类型。例如上面的那个例子,可以写成如下:
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]
3.获取和修改集合的值
你可以通过set的相关方法和属性来修改和获取到集合的值
<1>用 只读属性 count来获取一个集合的个数
print("I have \(favoriteGenres.count) favorite music genres.")
// Prints "I have 3 favorite music genres."
<2> 用 isEmpty这个布尔值的属性来检查 count这个属性的值是否等于0
if favoriteGenres.isEmpty {
print("As far as music goes, I'm not picky.")
} else {
print("I have particular music preferences.")
}
<3>你可以调用insert(:)这个方法来对集合插入一个新的值
favoriteGenres.insert("Jazz")
<4>你可以用 remove(:)这个方法删除集合中的某个值,如果这个值存在的话,返回删除后的值,如果不存在的话,返回nil。调用removeAll(), 可以删除集合中的全部元素;用contains(_:)判断是否包含某个值
if let removedGenre = favoriteGenres.remove("Rock") {
print("\(removedGenre)? I'm over it.")
} else {
print("I never much cared for that.")
}
// Prints "Rock? I'm over it."
if favoriteGenres.contains("Funk") {
print("I get up on the good foot.")
} else {
print("It's too funky in here.")
}
// Prints "It's too funky in here."
<5>用for-in 来遍历一个集合的值
for genre in favoriteGenres {
print("\(genre)")
}
// Jazz
// Hip hop
// Classical
在Swift中,Set类型是无序的,如果想按顺序遍历集合,用sorted()方法排序,该方法 按照从小到大的顺序排列后,以一个数组为元素返回。
for genre in favoriteGenres.sorted() {
print("\(genre)")
}
// Classical
// Hip hop
// Jazz
4.操作类型的集合
你可以有效地执行基本的集合操作,例如将两个集合组合在一起,确定两个集合有共同的值,或者确定两个集合是否包含了所有的、一些或者没有相同的值。
调用intersection(_:)方法用两个集合的相同元素生成一个新的集合;
调用symmetricDifference(_:)方法表示:用两个集合中的不同元素生成一个新的集合;
调用union(_:)方法表示:用两个集合的全部元素生成一个集合(该集合中,相同的值只保留一个)
调用subtracting(_:)方法表示:去除集合a中与集合b中相同的元素,生成一个新的集合
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7] oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]
5.集合间的元素关系与相等
用“==”号判断两个集合的值是否一致;
用isSubset(of:)方法判断集合中的所有值是否包含在指定集合中;
用isSuperset(of:)方法判断一个集合是否包含指定集合中的所有值;
用 isStrictSubset(of:) or isStrictSuperset(of:)方法判断一个集合是否是指定集合的子集合或父集合;
用 isDisjoint(with:)方法来判断两个集合是否没有共同值;
let houseAnimals: Set = ["Swift--Set的了解的更多相关文章
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- 算法与数据结构(十七) 基数排序(Swift 3.0版)
前面几篇博客我们已经陆陆续续的为大家介绍了7种排序方式,今天博客的主题依然与排序算法相关.今天这篇博客就来聊聊基数排序,基数排序算法是不稳定的排序算法,在排序数字较小的情况下,基数排序算法的效率还是比 ...
- 算法与数据结构(十五) 归并排序(Swift 3.0版)
上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...
- Swift enum(枚举)使用范例
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- swift开发新项目总结
新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案 1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编 考虑到新项目 ...
- swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明
关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,p ...
- 【swift】BlockOperation和GCD实用代码块
//BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...
- iOS开发系列--Swift 3.0
概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...
随机推荐
- Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机
#此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...
- Android中进程与线程及如何在子线程中操作UI线程
1. Android进程 一个应用程序被启动时,系统默认创建执行一个叫做"main"的线程.这个线程也是你的应用与界面工具包(android.widget和android.view ...
- 【HEVC帧间预测论文】P1.8 Complexity Control of High Efficiency Video Encoders for Power-Constrained Devices
参考:Complexity Control of High Efficiency Video Encoders for Power-Constrained Devices <HEVC标准介绍.H ...
- 获取页面URL两种方式
以请求http://localhost:8080/doctor/demo?code=1为例 一:用java代码获取 //获取URL中的请求参数.即?后的条件 code=1 String querySt ...
- 2019年今日头条机试_JAVA后台岗_第二题
使用map的递推,java对象做key需要重写equeal,hashCode方法,使拥有相同属性值的对象被识别为同一对象. import java.util.*; class Cat{ public ...
- 如何在一次请求中通过JS中获取Url中的参数
从A跳转到B,携带参数 例如: /pc/B.jsp?item=123456 B页面在js可以直接用 var item='${param.item}'; 这样就拿到啦 还有一种方法 定义一个函数 f ...
- 多线程test
import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import ...
- c/s端测试——nw.js篇(selenium工具)
最近在为兄弟部门开发自动化测试工具. 然后才知道现在竟然有JS工具可以把JS打包成cs端程序了,太牛了,js发展是真快.并且还是跨平台的,mac.windows.linux都支持. 当然,今天不是说n ...
- Node.js fs文件系统模块
一.读取文件几个步骤 1.先引入fs文件系统模块 2.使用readfile 或 readFileSync 注意点:它们的回调函数有两个参数,第一个是err,第二个是data,得到的data是buffe ...
- Hadoop集群安装指南(CHD5.9.1)(分布式+图文详解)
centos7.1,CDH5.9.1,3台机器,终极指导安装 下载链接如下: 安装文件下载链接如下: 链接:https://pan.baidu.com/s/1RQYNiWn9a-T8GXcCsoDBs ...