在Swift😇中给Zip()一个机会
Zip()可以节省您的时间,只需在代码中为其留出空间即可。
创建由两个基础序列构成的对对序列。
您可能不理解这些词的意思,那是我第一次读到的词,但是通过练习和一些搜索,可以用简单的词来定义它并显示它的作用。
zip(_:_:)
函数旨在将两个序列合并为一个元组序列
有例子可以使事情变得容易:
让 sequence1 = [“” ali“,” ahmed“,”穆罕默德“]
让 sequence2 = [1,2,3]
让 mergedSequence_zip = zip(sequence1,sequence2)
打印(数组(mergedSequence_zip))
//
[(“ ali”,1),(“ ahmed”,2),(“ mohamed”,3)]
看这个简单的例子知道会发生什么。
zip()将sequence1的第一项与sequence2的第一项合并/合并,并将这两项作为元组,对于第一项,然后对第二项和第三项进行相同的步骤
有zip的注释,zip()是否仅适用于Array? –没有
Zip()允许您使用Arrays,Sets,Dictionary或任何符合sequenceType协议的类型
因此,我们来看zip()对Dictionary类型的作用示例:
let sequenceDic1 = [“名称”:“ ahmed”,“地址”:“伦敦”]
let sequenceDic2 = [“名称”:“穆罕默德”,“地址”:“法国”]
让 zipDics = zip(sequenceDic1,sequenceDic2)
打印(数组(zipDics))
//
[(((key:“ name”,value:“ ahmed”),(key:“ name”,value:“ Mohamed”)),(((key:“ address”,value:“ London”),(key:“地址”,值:“法国”))]
这次发生了什么,这是元组类型的数组,为简单起见,让我们访问第一个元素。
打印(Array(zipDics).first!)
//
(((key:“ address”,value:“ London”),(key:“ address”,value:“ France”)) print(Array(zipDics).first!.0)
//
(键:“名称”,值:“ ahmed”) print(Array(zipDics).first!.0.key)
//
地址打印(Array(zipDics).first!.0.value)
//
伦敦
我们有4行代码让我解释发生了什么:
1-只是我们访问由zip()完成的元组数组中的第一个元素。
2-我们使用(.0)访问主元组中的第一个元组,因为我们已经嵌套了元组。
3-我们访问元组的值,我们通过键得到它。
4-我们访问元组的值,我们通过值得到它。
元组不是我们现在要谈论的话题,所以让我们继续
在我们完成之后,需要注意以下问题:
请注意,我们有:
当您要连接任意两个序列时,请确保所需的值匹配,那里的索引为“索引0,第二个序列将与索引0连接”
那要讨论的问题呢?
如果我们加入/合并两个大小不同的序列会怎样?
Zip()将自动选择两者中的较短者
让我们看看发生了什么事:
let sequence4 = [“” ali“,” ahmed“,”穆罕默德“]
让 sequence5 = [1,2]
让 mergedSequence_zip = zip(sequence4,sequence5)print(Array(mergedSequence_zip))
//
[(“ ali”,1),(“ ahmed”,2)]
哇,发生什么事了? —因为两个序列的大小不同,所以Zip()选择一个较短的序列,因此删除了“穆罕默德”
现在,什么方式可以访问Zip()中的值:
1-首先,我们可以使用Array():-(在本文中使用的方式)
让 sequence1 = [“” ali“,” ahmed“,”穆罕默德“]
让 sequence2 = [1,2,3]
让 mergedSequence_zip = zip(sequence1,sequence2)
让 zipValues = Array(mergedSequence_zip)
打印(zipValues)
//
[(“ ali”,1),(“ ahmed”,2),(“ mohamed”,3)]
2-第二种方法,我们可以使用map() :
让 sequence1 = [“” ali“,” ahmed“,”穆罕默德“]
让 sequence2 = [1,2,3]
让 mergedSequence_zip = zip(sequence1,sequence2)
let zipValues = mergedSequence_zip.map({($ 0,$ 1)})
打印(zipValues)
//
[(“ ali”,1),(“ ahmed”,2),(“ mohamed”,3)]
在这里,我们自己制作元组- ($ 0,$ 1)
3-第三种方法,我们可以使用foreach(),但是 这样,我们可以分别访问每个值。
让 sequence1 = [“” ali“,” ahmed“,”穆罕默德“]
让 sequence2 = [1,2,3]
让 mergedSequence_zip = zip(sequence1,sequence2)mergedSequence_zip.forEach {(args) in
让
(val1,val2)=参数
打印(val1)
打印(val2)
}
// ali
// 1
// ahmed
// 2
// mohamed
// 3
如我们所见,我们分别访问每个值。
这些方法中的任何一种都可以单独提供帮助,这取决于您要执行的操作,如何对您的逻辑或代码样式有所帮助。
我们可以进行任何其他操作,例如(reduce(),filter()),这是我的项目中的代码行,这些代码使zip()节省了我的时间和生命(仅显示其可能对您有帮助)。
mergedSequence_zip.map({$ 0.0 + $ 0.1})。reduce(0,+)
您可能不了解这条线是做什么的,但请尝试想象一下
本主题的最后一件事,如何解压缩这些序列,也许您有想要再次返回两个序列的逻辑。
我们将使用reduce(into:_ 🙂 可能很多人都不知道你能做什么,在写这篇文章之前我也是。
let sequence4 = [“” ali“,” ahmed“,”穆罕默德“]
让 sequence5 = [1,2,3]
let mergedSequence_zip = zip(sequence4,sequence5) let (unZipSeq2,unZipSeq1)= mergedSequence_zip.reduce(into:([String,(),[Int]())){(result.tuple) 在 result.0.append(tuple) .0)
result.1.append(tuple.1)
}
打印(unZipSeq2)
//
[“ ali”,“ ahmed”,“穆罕默德”] print(unZipSeq1)
//
[1,2,3]
这是解压缩合并序列的方法,解释它会使我们进入另一个主题,我们将在以后讨论,但是尝试查看它会得到它。