鉴于我在Swift中有一个数组,例如[1,2,3,4]
,有一种方法pairs()
会将其转换为元组数组:[(1,2), (2,3), (3,4)]
。
以下是一些有关pairs()
行为方式的示例:
pairs([])
应该返回,[]
因为它没有对。pairs([1])
也应该返回[]
,因为它没有对。pairs([1,2])
应该是[(1,2)]
。它只有一对。我可以为此编写代码Array
,但我想pairs()
作为的扩展使用Sequence
,以便它返回Sequence
成对的a。这将使得它可用在任何序列,并与方法,如兼容map
,reduce
,filter
,等。
我该如何创建这样的一个Sequence
?以及如何编写Sequence
以这种方式进行转换的方法,以便可以尽可能灵活地使用它?
我们可以使用zip()
和dropFirst()
如果我们定义的扩展Collection
类型:
extension Collection {
func pairs() -> AnySequence<(Element, Element)> {
return AnySequence(zip(self, self.dropFirst()))
}
}
例:
let array = [1, 2, 3, 4]
for p in array.pairs() {
print(p)
}
输出:
(1、2)
(2、3)
(3,4)
更多示例:
print(Array("abc".pairs()))
// [("a", "b"), ("b", "c")]
print([1, 2, 3, 4, 5].pairs().map(+))
// [3, 5, 7, 9]
print([3, 1, 4, 1, 5, 9, 2].pairs().filter(<))
// [(1, 4), (1, 5), (5, 9)]
(与我在此答案的第一个版本中写的不同…)将这种方法应用于时并不安全Sequence
,因为不能保证可以 无损 地遍历序列多次 。
这是使用自定义迭代器类型的直接实现,该类型也适用于序列:
struct PairSequence<S: Sequence>: IteratorProtocol, Sequence {
var it: S.Iterator
var last: S.Element?
init(seq: S) {
it = seq.makeIterator()
last = it.next()
}
mutating func next() -> (S.Element, S.Element)? {
guard let a = last, let b = it.next() else { return nil }
last = b
return (a, b)
}
}
extension Sequence {
func pairs() -> PairSequence<Self> {
return PairSequence(seq: self)
}
}
例:
print(Array([1, 2, 3, 4].pairs().pairs()))
// [((1, 2), (2, 3)), ((2, 3), (3, 4))]
问题内容: 这个下课 需要转换为 我尝试将对象手动传递给将变量设置为字典并返回字典的函数。但是,我希望有一种更好的方法来实现这一目标。 问题答案: 在Swift 4中,您可以从类型继承。
问题内容: 我正在处理代表文件系统的一些表,我需要选择每个文件夹的完整路径作为扁平字符串。 第一个表列出了每个文件夹的详细信息: 第二张表列出了文件夹关系的传递性关闭: 对于示例数据,我们假设存在以下文件夹: 这些将在以下表格中保留: 需要注意的一些细节: 每个文件夹中都有一个“身份排” ,在那里。 每个不是顶级文件夹的文件夹在其中仅包含一行 每个文件夹可以包含许多行,其中。这些中的每一个都代表“
问题内容: 有没有一种方法可以将Swift结构的地址转换为无效的UnsafeMutablePointer? 我尝试了一下但没有成功: 谢谢! 编辑: 我实际上正在尝试 将上下文 移植到Swift中 学习CoreAudio 的第一个示例。 这是我到目前为止所做的: 我正在努力留在Swift中,但是如果事实证明这是一个问题而不是优势,那么我最终将链接到C函数。 编辑:底线 如果您因为试图在Swift中
我想在Swift中将转换为。像这样的基本强制转换不起作用,因为这些类型不是原语,不像Objective-C中的s和s
问题内容: 我在Swift 中将元素转换为,然后将变量转换回时遇到了问题。 首先,我想提取以下JSON数据的元素: 放入NSData 变量,但似乎无法做到这一点。我用来解析如下: 但这给了我一个ScalarNumber数组,我不知道如何存储到一个对象中。 其次,我想从同一个对象生成回来: 但是NSData 对象不会转换为[-67,51,-38,61,-72,102,48],它只是使JSON字符串无
我是数据科学的初学者,我正在尝试使用Pandas来旋转此数据框架: 所以它变成这样:(标签应该变成列,文件路径变成行。) “标签”列是一组或一类文件路径。我想把它转换成这样一种方式,它适合这个函数:tf。Keras.preprocessing.image.flow_from_dataframe 提前感谢所有帮助我的人。