在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的第一项与sequ​​ence2的第一项合并/合并,并将这两项作为元组,对于第一项,然后对第二项和第三项进行相同的步骤

有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]

这是解压缩合并序列的方法,解释它会使我们进入另一个主题,我们将在以后讨论,但是尝试查看它会得到它。


感谢您的阅读! 如果您喜欢这篇文章,请鼓掌,以便其他人也可以阅读🙂