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环境中已经无法运行 ...
随机推荐
- 最优雅退出 Android 应用程序的 6 种方式
一.容器式 建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity import java.util.ArrayList; import java.util ...
- 031_spark架构原理
spark核心组件 driver master worker executor task(只有task是线程) 核心组件的原理图解
- cacti支持中文办法
1.yum groupinstall "chinese support" 2. 登陆Cacti,在主页的左边点击setting,选择paths页(console>>se ...
- Mac上安装Homebrew和wget
实际上是使用Homebrew来安装wget 安装Homebrew Homebrew一般称为brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常 ...
- CENTOS6.4上KVM虚拟机环境搭建
CENTOS6.4上KVM虚拟机环境搭建 关键词: KVM,虚拟机,windows7, VNC, 桥接网络,br0, SCSI, IDE 环境: host: CENTOS6.4 guest: ...
- SQLite – GROUP BY
SQLite - GROUP BY SQLite GROUP BY子句中使用与SELECT语句的合作安排相同的数据组. 在GROUP BY子句之前一个SELECT语句的WHERE子句,先于ORDER ...
- iview tabs里面放入 i-switch 注意slot不是写在 props里面
iview tabs里面放入 i-switch 注意slot不是写在 props里面 <Tabs value="name1"> <TabPane :label=& ...
- Java中的反射--Reflect
在张孝祥老师的Java讲解中,学习到了Java反射的一部分知识,觉得有必要好好学习一下哈. 一.反射的理解 经典总结:反射就是把Java类中的各种成分映射成为相应的Java类 例如:一个Java类中用 ...
- ffmpeg解析TS流
介绍: MPEG的系统层编码为不同的应用场景设计了两种格式: TS(Transport Stream) 和PS(Program Stream), 它们两者之间不具有层级关系, 在逻辑上,它们两者都 ...
- 18. PROFILING
18. PROFILING PROFILING表提供语句分析信息. 其内容对应于SHOW PROFILE和SHOW PROFILES语句生成的信息(参见"SHOW PROFILE语法&quo ...