Zip3 in Swift

形式
C
投稿日時
2019-10-19 15:21
公開期間
無期限
  1. struct Zip3SequenceIterator<Sequence1: Sequence, Sequence2: Sequence, Sequence3: Sequence>: IteratorProtocol {
  2. private var iterator1: Sequence1.Iterator
  3. private var iterator2: Sequence2.Iterator
  4. private var iterator3: Sequence3.Iterator
  5. init(_ sequence1: Sequence1, _ sequence2: Sequence2, _ sequence3: Sequence3) {
  6. self.iterator1 = sequence1.makeIterator()
  7. self.iterator2 = sequence2.makeIterator()
  8. self.iterator3 = sequence3.makeIterator()
  9. }
  10. mutating func next() -> (Sequence1.Element, Sequence2.Element, Sequence3.Element)? {
  11. iterator1.next().flatMap { e1 in
  12. iterator2.next().flatMap { e2 in
  13. iterator3.next().map { e3 in
  14. (e1, e2, e3)
  15. }
  16. }
  17. }
  18. }
  19. }
  20. struct Zip3Sequence<Sequence1: Sequence, Sequence2: Sequence, Sequence3: Sequence>: Sequence {
  21. private let sequence1: Sequence1
  22. private let sequence2: Sequence2
  23. private let sequence3: Sequence3
  24. func makeIterator() -> Zip3SequenceIterator<Sequence1, Sequence2, Sequence3> {
  25. .init(sequence1, sequence2, sequence3)
  26. }
  27. init(_ s1: Sequence1, _ s2: Sequence2, _ s3: Sequence3) {
  28. sequence1 = s1
  29. sequence2 = s2
  30. sequence3 = s3
  31. }
  32. }
  33. func zip3<S1, S2, S3>(_ s1: S1, _ s2: S2, _ s3: S3) -> Zip3Sequence<S1, S2, S3> {
  34. .init(s1, s2, s3)
  35. }
ダウンロード 印刷用表示

このコピペの URL

JavaScript での埋め込み

iframe での埋め込み

元のテキスト