Swift学习笔记七:集合

数组 Array

  • 数组的创建
    • OC 中使用 @[] 定义数组, Swift 中使用 [] 定义数组
    • [类型] 表示数组中存放的都是该类型的元素
    • Swift 中数组中的元素可以是基本数据类型
// 创建数组
var array1: Array<Int>
vararray2:Array<Int> = [2,3]
var array3: [Int]
var array33 = [Int]()

array1 = Array(arrayLiteral: 1, 2, 3, 4)

var array4 = Array(repeatElement("A", count: 10))
vararray44 = Array(repeating:0.0, count:3
)

// 创建空数组
var array5: Array<Int> = []
var array6: [Int] = Array()

// 如果数据中的类型不一致, 要指定类型  Array<Any>
let array7: Array<Any> = ["1", 1, p]
  • 数组的遍历
// 1. 按照下标遍历
for i in 0..<array.count
{
   print(array[i])
}

// 2. for in 遍历
for i in array
{
   print(i)
}

// 3. enum block 遍历, 同时遍历 下标 和 元素
for i in array.enumerated()
{
   print(i)
}

// 4. 遍历 下标 和 元素
for (index, element) in array.enumerated()
{
   print("\(index) --- \(element)")
}

// 5. 反序遍历
for i in array.reversed()
{
   print(i)
}

for s in array.enumerated().reversed()
{
   print(s)
}
  • 数组的增 删 改 合并
// OC 中数组分 可变 NSMutableArray()   /  不可变 NSArray()
// Swift 中数组 可变 var / 不可变 let
var arr = ["1", "2", "3"]

// 追加元素
arr.append("0")

// 修改, 通过下标定位
arr[0] = "AAA"

// 数组越界
--- Index out of range
// array[5] = "XXX"

// 删除
arr.remove(at: 3)

// 删除全部, 并且保留空间
arr.removeAll(keepingCapacity: true)

// 数组合并
var arr1 = ["3", "11", "2"]
var arr2 = ["AAA","CCC","BB","FFF"]

// 注意: 要合并数组的两个类型必须一致
arr1 += arr2
  • 数组的排序
// 数组排序
var array1 = Array(arrayLiteral: 1, 2, 3, 4)

// 数组排序 默认是 升序排列
array1.sort()

// 降序排列
array1.sort(by: >)

// 升序排列
array1.sort(by: <)

字典 Dictionary

  • OC 定义字典 @{},  Swift 定义字典 [key : value]
// 字典的声明和创建
var dic1: Dictionary<Int, String>
var dic2: [Int:String]
var dic3 = Dictionary(dictionaryLiteral:(1,"1"), (2,"2"))
var dic4 = [1:"1”, 2:"2"]
var dic5 = [Int : String]()
  • 字典的增 删 改
var dict: [String : Any] = ["name" : "张", "age" : 18]

// 字典中的新增与修改是通过 KEY 取值: 如果 KEY 存在, 则表示修改; 如果 KEY 不存在, 则表示新增

// 新增
dict["title"] = "AAA"

// 修改
dict["name"] = "李"

dict.updateValue("00000000", forKey: "name")
dict.updateValue("ppp", forKey:"xxx")

// 删除: 如果存在 对应的 Key, 则删除; 如果不在 对应的 Key, 则不进行操作
dict.removeValue(forKey: "age")
print(dict)

dict.removeValue(forKey: "age")
print(dict)
  • 字典的遍历
let dict1: [String : Any] = ["name" : "张", "age" : 18, "title" : "名称"]

for e in dict1
{
   print(e)
}

for (key, value) in dict1
{
   print("\(key) --- \(value)")
}

// 合并
var dict3: [String : Any] = ["name" : "张", "age" : 18, "title" : "名称"]
let dict4: [String:Any] = ["name":"李","height":1.8]

// 遍历, 并依次设置
for (key, value) in dict4
{
   dict3[key] = value
}

集合 Set

  • Set 的创建
// 创建集合
var set1: Set<Int> = [1, 2, 3, 4]
var set2:Set<String> = Set(arrayLiteral:"1","2","3")
var set3 = Set(arrayLiteral:1,2,3)

var set4: Set<Int> = []
  • 集合的常用操作
// 获取其中元素个数
set1.count

// 判断集合是否为空集合
if set1.isEmpty
{
   print("集合为空")
}

// 判断集合中是否包含某个元素
if set1.contains(2)
{
   print("集合中包含此元素")
}

// 插入
set1.insert(5)

// 获取指定位置的下标
var setIndex = set1.index(of: 4)
//移除指定下标的元素
set1.remove(at: setIndex!)

// 移除指定元素
set1.remove(1)
  • 集合的数学运算
var setN: Set<Int> = [1, 2, 3, 4, 5, 6]
varsetM:Set<Int> = [4, 5, 6, 7, 8]

// 进行 intersection 运算:取两个集合的交集
var setInter = setN.intersection(setM)

// 进行 symmertricDifference 取两个集合不相同的部分
var setDif = setN.symmetricDifference(setM)

// 进行 集合的 union 运算,并集
var setUni = setN.union(setM)

// 进行集合的 subtracting 运算:用一个集合去截取另一个集合
var setSub = setN.subtracting(setM)

setN == setM

var setSub1: Set<Int> = [1, 2, 3]

// 判断是否是子集或者父集
setSub1.isSubset(of: setN)
setN.isSuperset(of:setSub1)

// 判断是否是真子集或者真父集
setSub1.isStrictSubset(of: setN)
setN.isStrictSuperset(of: setSub1)
  • 集合的遍历
var setSub1: Set<Int> = [1, 2, 3]

for item in setSub1
{
   print(item)
}

for item in setSub1.enumerated()
{
   print(item)
}

for (index, item) in setSub1.enumerated()
{
   print("\(index) : \(item)")
}

for index in setSub1.indices
{
   print(setSub1[index])
}
时间: 2024-10-17 00:26:23

Swift学习笔记七:集合的相关文章

swift学习笔记(七)自动引用计数

与Object-c一样,swift使用自动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例,因为struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并不是引用计数. 当一个实例被初始化时,系统会自动分配一定的内存空间,用于管理属性和方法.当实例对象不再被使用时,其内存空间被收回. swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主引用unw

Swift学习笔记七:闭包

闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. Swift 会为您管理在 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: 1. 全局函数是一个有名字但不会捕获任何值的闭包 2. 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 3. 闭包表达式是一个可以捕获其上下文中变量或常量值的没有名字的闭包 一.闭包表达式 闭包函数类似于Objective-C中的block.下面我们用事实说话: let counts =

Swift学习笔记- 4.集合类型

数组 数组的简单语法 写数组应遵循 Array<SomeType> 这样的形式,也可以使用 [someType] 这样的简单语法.推荐使用更短的 数组构造语句 数组字面量: [value1, value2, value3] var shoppingList: [String] = ["Eggs", "Milk”] 由于类型推断机制,当我们用字面量构造只拥有相同类型数值的时候,我们不必把数组的类型定义写清楚.还可以这么写: var shoppingList = [&

Swift学习笔记七

控制流 Swift提供了和C类似的控制流表达式,包括for.while.if.switch.当然也包括break和continue这种语句来引导控制流到某个指定点的语句. 在C的for基础上,Swift提供了更强大的for-in,遍历起来更方便. Swift的switch也比C中的更强大,其中的case在执行之后并不会继续执行下一个case,这样就避免了C中忘记写break时产生的逻辑错误.同时,case也能匹配更多的模式,包括间隔匹配,元组等,被匹配的值可以被赋值给变量或者常量,以便在case

swift学习笔记(七)自己主动引用计数

与Object-c一样,swift使用自己主动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自己主动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例,由于struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并非引用计数. 当一个实例被初始化时,系统会自己主动分配一定的内存空间,用于管理属性和方法.当实例对象不再被使用时,其内存空间被收回. swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主

Spring.Net学习笔记七(集合类型的注入)

Spring.NET还支持集合类型的注入.而且使用起来也比较方便. 一.ILIst类型 使用<list>元素作为ILIst的标签,value为集合中元素的值.也可以注入对象,甚至关联其它对象,使用 <ref/>元素表示关联的对象,object 属性为所关联对象的id或name.集合可以为空,用<null/>元素来标记. 在<list>元素中设置 element-type 属性表示泛型T的类型,例如 element-type="int"  

swift学习笔记之二——集合

//=========================== //2014/7/21 17:27 swift集合 //=========================== swift提供了两种集合类型,arrays和dictionaryies,两种集合都是可变的,可以在集合声明后对其进行新增.删除和修改操作. 1.array 数组的定义与java数组相同,但swift的数组提供了更灵活的创建方式和操作方式. 数组创建和初始化方式: var array1: Array<T> = [val1,va

swift学习笔记(三)关于拷贝和引用

在swift提供的基本数据类型中,包括Int ,Float,Double,String,Enumeration,Structure,Dictionary都属于值拷贝类型. 闭包和函数同属引用类型 捕获则为拷贝.捕获即定义这些常量和变量的原作用域已不存在,闭包仍然可以在闭包函数体内引用和修改这些值 class属于引用类型. Array的情况稍微复杂一些,下面主要对集合类型进行分析: 一.关于Dictionary:无论何时将一个字典实例赋给一个常量,或者传递给一个函数方法时,在赋值或调用发生时,都会

Lua学习笔记(七):迭代器与泛型for

1.迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含