繁体   English   中英

斯威夫特: zip() 如何处理两个不同大小的集合?

[英]Swift: How does zip() handle two different sized collections?

zip() 函数接受两个序列并返回以下元组序列:

output[i] = (sequence1[i], sequence2[i])

然而,这些序列可能具有不同的维度。 我的问题是 Swift 语言如何处理这个问题?

文档完全没用。

在我看来,有两种可能性(在 Swift 中):

  • 停在最短的终点
  • 在最长的末尾停止,填充默认构造函数或较短元素类型的预定义值

Swift使用第一个选项, 结果序列的长度等于两个输入中较短的一个

例如:

let a: [Int] = [1, 2, 3]
let b: [Int] = [4, 5, 6, 7]

let c: [(Int, Int)] = zip(a, b) // [(1, 4), (2, 5), (3, 6)]

Apple 的zip(_:_:)文档已经更新以回答这个问题:

https://developer.apple.com/documentation/swift/1541125-zip

如果传递给zip(_:_:)的两个序列长度不同,则生成的序列与较短的序列长度相同 在此示例中,结果数组的长度与words相同:

 let words = ["one", "two", "three", "four"] let naturalNumbers = 1...Int.max let zipped = Array(zip(words, naturalNumbers)) // zipped == [("one", 1), ("two", 2), ("three", 3), ("four", 4)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM