Skip to content

Instantly share code, notes, and snippets.

@koher
koher / each-pair-without-any-sequence.md
Created March 3, 2017 03:12
`eachPair` without `AnySequence`

eachPair without AnySequence

extension Sequence where Self.SubSequence: Sequence {
  func eachPair() -> Zip2Sequence<Self, Self.SubSequence> {
    return zip(self, self.dropFirst())
  }
}

(1...10).eachPair().forEach { print($0) }
// Argo
struct User {
  let id: Int
  let name: String
  let email: String?
  let role: Role
  let companyName: String
  let friends: [User]
}
class Animal {}
class Cat: Animal {}
let cats: Array<Cat> = [Cat()]
let animals: Array<Animal> = cats // OK
let cat: Optional<Cat> = .some(Cat())
let animal: Optional<Animal> = cat // OK
struct Box<Value> {
open class Animal
class Cat: Animal()
class Box<out Value> ( // `out` for covariance
val value: Value
)
fun main(args: Array<String>) {
val catBox: Box<Cat> = Box(Cat())
val animalBox: Box<Animal> = catBox // OK
extension CountableRange {
public func contains(_ range: CountableRange<Bound>) -> Bool {
return lowerBound <= range.lowerBound && range.upperBound <= upperBound
}
public func contains(_ range: CountableClosedRange<Bound>) -> Bool {
return lowerBound <= range.lowerBound && range.upperBound < upperBound
}
public func contains(_ range: Range<Bound>) -> Bool {
val a: Int = 999
val b: Int? = a
val c: Int? = a
println(b === c) // false
// destroyed by `-Ounchecked`
import Foundation
let a: Int
switch arc4random() % 3 {
case 0:
print("0")
a = 111
case 1:
let array = [2, 3, 3, 4, 7, 2, 1, 4, 0, 9, 1, 2]
// array の要素の値ごとに集計
// 2 が 3 個、 3 が 2 個 などを知りたい
var nToCount = [Int: Int]()
for n in array {
nToCount[n, default: 0] += 1
}
// 結果を表示
let array = [2, 3, 3, 4, 7, 2, 1, 4, 0, 9, 1, 2]
// array の要素の値ごとに集計
// 2 が 3 個、 3 が 2 個 などを知りたい
let nToCount: [Int: Int] = array.reduce(into: [:]) { nToCount, n in
nToCount[n, default: 0] += 1
}
// 結果を表示
for (n, count) in (nToCount.sorted { $0.key < $1.key }) {
protocol CatProtocol {
var name: String { get set }
func nya() -> String
mutating func sleep()
func clone() -> Self
func cast<T>(to: T.Type) -> T?
}
class Cat : CatProtocol {
required init() {}