前言
-
Set:集合
public struct Set<Element : Hashable> : Hashable, CollectionType, ArrayLiteralConvertible
public class NSSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration集 NSSet 是一个无序对象的集合。集也有动态和静态之分,NSSet 是静态类型,成员不能被修改。NSMutableSet 是动态类型,成员可以被修改。
集和数组不一样的是,它存储的每一个元素都是唯一的,没有完全相同的两个元素。所以数组中如果有两个相同的值,转换为集后只会有一个值。
-
NSCountedSet:计数集合
public class NSCountedSet : NSMutableSet
- NSCountedSet 这种集合中同一对象可以出现多次,然而并非在集合中存放多次这个对象,而是维护一个次数计数。当第一次将对象添加到集合中时,对象的 count 值被置为 1,然后每次将这个对象添加到集合中,count 值就会增加 1,每次从集合中删除对象,count 值就会减 1.当对象的 count 值为零时,实际上对象本身就被删除了。
-
NSIndexSet:索引集合
public class NSIndexSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding
public class NSMutableIndexSet : NSIndexSet- NSIndexSet 这种集合用于存储有序的索引到某种数据结构,比如数组。
1、集合的 创建
// Set 型集合
// 不赋初值,指定数据类型为 String 型
let set1 = Set<String>()
// 不指定数据类型,自动推断
let set2:Set = [1, 3, 5, 7]
// 指定数据类型为 Int 型
let set3:Set<Int> = [1, 3, 5, 7]
// NSSet 型集合
let swiftArr:Array = ["a", "b", "c"]
let swiftSet:Set = [1, 2, 3, 4]
// 创建一个空集合
let nsSet1:NSSet = NSSet()
// 指定多个元素值
let nsSet2:NSSet = [2, 4, 6, 8]
// 由 Array 型数组创建
let nsSet3:NSSet = NSSet(array:swiftArr)
// 由 Set 型集合创建
let nsSet4:NSSet = NSSet(set: swiftSet)
// 由 NSSet 型集合创建
let nsSet5:NSSet = NSSet(set: nsSet3)
// 指定一个元素值
let nsSet6:NSSet = NSSet(object: 7)
// 指定多个元素值
let nsSet7:NSSet = NSSet(objects: 2, 4, 6, 8)
2、集合成员 个数的计算
// Set 或 NSSet 型集合
let set:NSSet = [1, 3, 5, 7]
let num:Int = set.count
3、集合元素的获取
// NSSet 型集合
let nsSet:NSSet = [2, 4, 6, 8]
// 获取集合中指定的元素,不存在时返回 nil
let object1:AnyObject? = nsSet.member(8)
// 获取集合中随机的一个值,集合为空时返回 nil
let objects1:AnyObject? = nsSet.anyObject()
// 获取集合中所有的元素
let objects2:AnyObject = nsSet.allObjects
4、集合的比较
// Set 型集合
let swiftSet1:Set = [1, 3, 5, 7]
let swiftSet2:Set = [5, 7, 9, 11]
// 判断集合是否为空
let bl1:Bool = swiftSet1.isEmpty
// 判断集合中是否包含某个元素
let bl2:Bool = swiftSet1.contains(7)
// 相等,判断两个集合是否相等
let bl3:Bool = swiftSet1 == swiftSet2
// 子集,判断当前集合是否是指定集合的子集
let bl4:Bool = swiftSet1.isSubsetOf(swiftSet2)
// 交集,返回当前集合与指定集合的交集,没有交集时返回一个空集合
let interSet:Set = swiftSet1.intersect(swiftSet2)
// 并集,返回当前集合与指定集合的并集
let unionSet:Set = swiftSet1.union(swiftSet2)
// NSSet 型集合
let nsSet1:NSSet = [2, 4, 6, 8]
let nsSet2:NSSet = [6, 8, 10, 12]
let nsSet3:NSMutableSet = [6, 8, 10, 12]
// 判断集合中是否包含某个元素
let bl5:Bool = nsSet1.containsObject(8)
// 相等,判断两个集合是否相等
let bl6:Bool = nsSet1 == nsSet2
// 相等,判断两个集合是否相等
let bl7:Bool = nsSet1.isEqualToSet(nsSet2 as Set)
// 子集,判断当前集合是否是指定集合的子集
let bl8:Bool = nsSet1.isSubsetOfSet(nsSet2 as Set)
// 交集,判断当前集合与指定集合是否有交集
let bl9:Bool = nsSet1.intersectsSet(nsSet2 as Set)
// 交集,返回当前集合与指定集合的交集,返回到当前集合中
nsSet3.intersectSet(nsSet1 as Set)
// 并集,返回当前集合与指定集合的并集,返回到当前集合中
nsSet3.unionSet(nsSet1 as Set)
// 补集,返回当前集合与指定集合的补集,返回到当前集合中,当前集合中删除与指定集合的交集
nsSet3.minusSet(nsSet1 as Set)
5、集合元素的添加
// Set 型集合
var swiftSet:Set = [1, 3, 5, 7]
// 向集合中添加一个元素
swiftSet.insert(8)
// NSSet 型集合
let nsSet:NSMutableSet = [2, 4, 6, 8]
// 向集合中添加一个元素
nsSet.addObject(10)
// 向集合中添加一个数组
nsSet.addObjectsFromArray([11, 12, 12])
6、集合元素的删除
// Set 型集合
var swiftSet:Set = [1, 3, 5, 7]
// 删除第一个元素
swiftSet.removeFirst()
// 删除指定元素
swiftSet.remove(1)
// 删除所有元素
swiftSet.removeAll(keepCapacity: true)
// NSSet 型集合
let nsSet:NSMutableSet = [2, 4, 6, 8]
// 删除指定元素
nsSet.removeObject(4)
// 删除指定集合,当前集合中删除与指定集合的交集
nsSet.minusSet([2, 6])
// 删除所有元素
nsSet.removeAllObjects()
7、集合元素的修改
// NSSet 型集合
let nsSet:NSMutableSet = [2, 4, 6, 8]
nsSet.setSet([1, 2, 3])
8、集合的遍历
// NSSet 型集合
let nsSet:NSSet = [2, 4, 6, 8]
// 用闭包遍历
nsSet.enumerateObjectsUsingBlock { (obj:AnyObject, stop:UnsafeMutablePointer<ObjCBool>) in
print(obj)
}
// 用迭代遍历
let enu:NSEnumerator = nsSet.objectEnumerator()
// AnyObject 后不要加 ?,否则会导致一直循环
while let obj:AnyObject = enu.nextObject() {
print(obj)
}
// 条件遍历
let set:Set = nsSet.objectsPassingTest { (obj:AnyObject, stop:UnsafeMutablePointer<ObjCBool>) -> Bool in
return (obj as! Int) > 5 ? true : false
}
print(set)
9、计数集合的创建
let nsCountSet1:NSCountedSet = NSCountedSet()
let nsCountSet2:NSCountedSet = NSCountedSet(capacity: 0)
let nsCountSet3:NSCountedSet = NSCountedSet(array: [1, 3, 5, 7, 9])
let nsCountSet4:NSCountedSet = NSCountedSet(set: [6, 9])
let nsCountSet5:NSCountedSet = NSCountedSet(object: 8)
let nsCountSet6:NSCountedSet = NSCountedSet(objects: [2, 3, 6, 8], count: 4)
10、计数集合元素的添加
let nsCountSet:NSCountedSet = [1, 3, 5, 7, 9]
// 向集合中多次添加同一个元素,该元素的计数值增加
nsCountSet.addObject(6)
11、计数集合元素的删除
let nsCountSet:NSCountedSet = [1, 3, 5, 7, 9]
// 从集合中删除元素,该元素的计数值减小
nsCountSet.removeObject(5)
12、计数集合计数值的计算
let nsCountedSet:NSCountedSet = NSCountedSet(array: [1, 2, 3])
nsCountedSet.addObject(2)
nsCountedSet.removeObject(1)
// 检索集合中指定元素的计数值
let num1:Int = nsCountedSet.countForObject(1)
// 检索集合中指定元素的计数值
let num2:Int = nsCountedSet.countForObject(2)
13、索引集合的创建
let indexSet1:NSIndexSet = NSIndexSet()
let indexSet2:NSIndexSet = NSIndexSet(index: 8)
let indexSet3:NSIndexSet = NSIndexSet(indexSet: indexSet2)
let indexSet4:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 8))
14、索引集合元素数量的计算
let indexSet:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 8))
// 计算索引集合所有索引的数量
let num1:Int = indexSet.count
// 计算索引集合中某一范围内的索引的数量
let num2:Int = indexSet.countOfIndexesInRange(NSMakeRange(3, 4))
15、索引集合元素的获取
let indexSet:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 8))
// 获取索引集合中的第一个索引,如果集合为空则返回 NSNotFound
let index1:Int = indexSet.firstIndex
// 获取索引集合的最后一个索引,如果集合为空则返回 NSNotFound
let index2:Int = indexSet.lastIndex
// 获取索引集合中小于指定的索引且最接近的索引,如果没有小于的索引则返回 NSNotFound
let index3:Int = indexSet.indexLessThanIndex(5)
// 获取索引集合中小于等于指定的索引且最接近的索引,如果没有小于的索引则返回 NSNotFound
let index4:Int = indexSet.indexLessThanOrEqualToIndex(5)
// 获取索引集合中大于指定的索引且最接近的索引,如果没有大于的索引则返回 NSNotFound
let index5:Int = indexSet.indexGreaterThanIndex(7)
// 获取索引集合中大于等于指定的索引且最接近的索引,如果没有大于的索引则返回 NSNotFound
let index6:Int = indexSet.indexGreaterThanOrEqualToIndex(7)
16、索引集合的判断
let indexSet:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 8))
// 判断索引集合中是否包含某个索引
let bl1:Bool = indexSet.containsIndex(9)
// 判断一个索引集合中是否包含另一个索引集合
let bl2:Bool = indexSet.containsIndexes(NSIndexSet(indexesInRange: NSMakeRange(2, 3)))
// 判断一个索引集合中是否包含某一个范围内的所有值
let bl3:Bool = indexSet.containsIndexesInRange(NSMakeRange(2, 3))
// 判断一个索引集合中是否包含某一个范围内的值(是否有交集)
let bl4:Bool = indexSet.intersectsIndexesInRange(NSMakeRange(7, 3))
// 判断两个索引集合是否相等
let bl5:Bool = indexSet.isEqualToIndexSet(NSIndexSet(indexesInRange: NSMakeRange(1, 7)))
17、索引集合的添加
let mIndexSet:NSMutableIndexSet = NSMutableIndexSet(indexesInRange: NSMakeRange(1, 3))
// 添加一个索引元素,集合中已存在时会合并
mIndexSet.addIndex(6)
// 添加一个索引集合,两个索引集合有交集时会合并
mIndexSet.addIndexes(NSIndexSet(indexesInRange: NSMakeRange(8, 2)))
// 添加一个范围内的元素,有交集时会合并
mIndexSet.addIndexesInRange(NSMakeRange(12, 3))
18、可变索引集合删除
let mIndexSet:NSMutableIndexSet = NSMutableIndexSet(indexesInRange: NSMakeRange(1, 10))
// 删除一个索引集合中的索引元素
mIndexSet.removeIndex(2)
// 删除指定集合中含有的索引元素
mIndexSet.removeIndexes(NSIndexSet(indexesInRange: NSMakeRange(4, 2)))
// 删除指定范围内含有的索引元素
mIndexSet.removeIndexesInRange(NSMakeRange(8, 3))
// 删除全部索引元素
mIndexSet.removeAllIndexes()
19、索引集合的遍历
let indexSet:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 5))
// 用闭包遍历
// 1. enumerateIndexesUsingBlock
// 遍历获取索引集合的所有索引值
indexSet.enumerateIndexesUsingBlock { (idx:Int, stop:UnsafeMutablePointer<ObjCBool>) in
print(idx)
}
// 2. enumerateRangesUsingBlock
// 遍历获取索引集合的起始值和索引元素数量
indexSet.enumerateRangesUsingBlock { (range:NSRange, stop:UnsafeMutablePointer<ObjCBool>) in
print("\(range.location), \(range.length)")
}
// 条件遍历
// 1. indexesPassingTest
// 遍历索引集合,找出索引中所有满足条件的索引
let indexs:NSIndexSet = indexSet.indexesPassingTest { (idx, stop) -> Bool in
return idx > 3 ? true : false
}
indexs.enumerateIndexesUsingBlock { (idx:Int, stop:UnsafeMutablePointer<ObjCBool>) in
print(idx)
}
// 2. indexPassingTest
// 遍历索引集合,找出索引中第一个满足条件的索引
let index:Int = indexs.indexPassingTest { (idx, stop) -> Bool in
return idx > 3 ? true : false
}
print(index)
iOS - Swift Set 集合的更多相关文章
-
iOS Swift WisdomScanKit图片浏览器功能SDK
iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介 WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...
-
iOS swift的xcworkspace多项目管理(架构思想)
iOS swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...
-
iOS Swift 模块练习/swift基础学习
SWIFT项目练习 SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图 +控件 1.UIImag ...
-
ios swift 实现饼状图进度条,swift环形进度条
ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...
-
Building gRPC Client iOS Swift Note Taking App
gRPC is an universal remote procedure call framework developed by Google that has been gaining inter ...
-
iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK
iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言: 今天给大家 ...
-
iOS Swift WisdomHUD 提示界面框架
iOS Swift WisdomHUD 提示界面框架 Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...
-
iOS Swift WisdomKeyboardKing 键盘智能管家SDK
iOS Swift WisdomKeyboardKing 键盘智能管家SDK [1]前言: 今天给大家推荐个好用的开源框架:WisdomKeyboardKing,方面iOS日常开发,优点和功能请 ...
-
iOS swift项目IM实现,从长连接到数据流解析分析之Socket
iOS swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介: 去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了: ...
随机推荐
-
Kali 使用ssh,安装vmware tools 和字体重叠
Kali一直是我所爱,说说遇到的问题吧 第一个:字体重叠 gnome-tweak-tool --打开工具 第二个:ssh 修改sshd_config文件,命令为: vi /etc/ssh/sshd_c ...
-
IOC理解
控制反转(反转控制):谁控制了谁? 就是交换控制权1.A a =new A(); 要使用这个A 必须你去new他.控制权在a2.由第三方来进行创造这个A,你用的时候直接用就是.控制权在第三方. 3 ...
-
Xcode 快捷键操作
菜单栏 桌面 dock 不同应用的菜单栏始终出现在桌面最左上部 commond +shift+y 显示那个XCODE的调试框口 commond +R 运行 commond +,是个性设置,对于任何一 ...
-
(转)iOS 开发,工程中混合使用 ARC 和非ARC
[前提知识] ARC:Automatic Reference Counting,自动引用计数 在开发 iOS 3 以及之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动 retain. ...
-
CSSBox - Java HTML rendering engine
CSSBox - Java HTML rendering engine CSSBox is an (X)HTML/CSS rendering engine written in pure Java. ...
-
学习了LINUX下用C语言遍历文件夹,一些心得
struct dirent中的几个成员: d_type:4表示为目录,8表示为文件 d_reclen:16表示子目录或文件,24表示非子目录 d_name:目录或文件的名称 具体代码如下,仅供参考 # ...
-
1120 机器人走方格 V3(组合数)
题目实际上是求catalan数的,Catalan[n] = C(2*n,n) / (n+1) = C(2*n,n) % mod * inv[n+1],inv[n+1]为n+1的逆元,根据费马小定理,可 ...
-
weblogic使用wlst脚本实现自动部署
创建weblogic的server和cluster ip="10.20.0.2" nwport=8001 wwport=9001 nwlist=[ ('wtdsrwnw','Clu ...
-
在vue中调用echarts中的地图散点图~
首先!当然是在vue中引入echarts! 命令行 npm install echarts --save 在main.js文件中里引入 import echarts from 'ech ...
-
Grunt: 拼接代码,js丑化(压缩),css压缩,html压缩,观察文件,拷贝文件,删除文件,压缩文件
准备工作 grunt 基于nodeJs所以 nodeJs需要的基础配置都需要安装 1.Grunt 安装 npm install -g grunt-cli 这是全局安装 2.在当前文件下npm init ...