среда, 10 июня 2020 г.

Swift, Collections, Closures

Online Swift Playground  

//Array
var arr0 = [Int]()
let arr1 = [1,2,3]
print("arr1: \(arr1)")

let arr2 = Array(repeating: 0, count: 3)
print("arr2.count: \(arr2.count)")

var arr3:[String] = []
print("arr3.isEmpty: \(arr3.isEmpty)")
arr3.append("a")
arr3.append("b")
arr3 += ["c", "d"]
print("arr3: \(arr3)")

print("first: \(arr3[0])")
print("slice: \(arr3[1...2])")
print("first: \(arr3.first!)")
print("last: \(arr3.last!)")
print("min: \(arr3.min()!)")
print("max: \(arr3.max()!)")

let arr4 = Array(arr1[1...2])
print("arr4: \(arr4)")
print("arr4 has 2: \(arr4.contains(2))")
print("slice has b: \(arr3[1...2].contains("b"))")

let str1 = "Swift is cool"
print("split: \(str1.split() {$0 == " "})")

var arr5 = [2,1,3]
arr5.sort()
print("sort <: \(arr5)")
arr5.sort(by: >)
print("sort >: \(arr5)")
arr5.insert(0, at: 0)
print("arr5: \(arr5)")
let x = arr5.removeLast()
print("\(x) was removed from arr5: \(arr5)")
arr5.remove(at: 1)
print("arr5: \(arr5)")
print("index of 2 is: \(arr5.firstIndex(of: 2)!)")
arr5[1] = 1
print("arr5: \(arr5)")
arr5[0...1] = [1, 2, 3]
print("arr5: \(arr5)")
arr5.insert(arr5.remove(at: 2), at: 0)
print("arr5: \(arr5)")
arr5.swapAt(1, 2)
print("arr5: \(arr5)")
let arr6 = arr5.sorted()
print("old arr5: \(arr5)")
print("new arr6: \(arr6)")
print(Array(arr5.reversed()))

for i in arr6{
    print(i)
}

for (idx, item) in arr6.enumerated() {
    print("[\(idx)] - \(item)")
}

func sum(in arr: [Int]) -> Int {
    var sum = 0
    for num in arr {
        sum += num
    }
    return sum
}
print("sum: \(sum(in: arr6))")

//Dictionary
var dic1 = ["Mike":1993, "Tom":1998]
print(dic1)

var dic2:[String: Int] = [:]
dic2.reserveCapacity(10)
print(dic2)

print(dic1["Mike"]!)
print(dic1.count)
print(dic2.isEmpty)

var dic0:[Character:Int] = [:]
var l = dic0["a", default: 0]
print(l) //0

//add pair or modify value
let old:Int? = dic1.updateValue(2000, forKey: "Mike")
print("old value: \(old!)")
dic1["Tom"] = 1999
print(dic1)

//remove pair
dic1.removeValue(forKey: "Tom")
print(dic1)
dic1["Mike"] = nil
print(dic1)

let dic3 = ["name":"Mike", "age":"43"]
for (key, value) in dic3 {
    print("key: \(key) - value: \(value)")
}
print("keys: ", terminator: "")
for key in dic3.keys{
    print("\(key), ", terminator: "") // no newline
}
print() // newline
print("values: ", terminator: "")
for value in dic3.values{
    print("\(value), ", terminator: "")
}

//Set
var set1: Set<Int> = [1, 2, 3]
print(set1)
let arr:[Int] = [4, 5, 6, 6, 6]
var set2 = Set(arr)
print(set2)
print(set2.contains(4))
set1.insert(0)
print(set1)
let x = set1.remove(3)
print(x!)
print(set1)

//Closures
var cl1 = { (a: Int, b: Int) -> Int in
    return a + b
}
print(cl1(4, 2))

var cl2 = { (a: Int, b: Int) -> Int in
    a - b
}
print(cl2(4, 2))

var cl3: (Int, Int) -> Int = { (a, b) in
    a * b
}
print(cl3(4, 2))

var cl4: (Int, Int) -> Int = {
    $0 / $1
}
print(cl4(4, 2))

func foo(a: Int, b: Int, cl: (Int, Int) -> Int) -> Int{
    cl(a, b)
}
print(foo(a:4, b:2, cl:cl1))
print(foo(a:4, b:2, cl:cl2))
print(foo(a:4, b:2, cl:cl3))
print(foo(a:4, b:2, cl:cl4))

print(foo(a:4, b:2, cl:{(a:Int, b:Int) -> Int in return a + b}))
print(foo(a:4, b:2, cl:{(a:Int, b:Int) -> Int in a - b}))
print(foo(a:4, b:2, cl:{(a, b) in a * b}))
print(foo(a:4, b:2, cl:{$0 / $1}))

print(foo(a:4, b:2, cl: +))
print(foo(a:4, b:2, cl: -))
print(foo(a:4, b:2, cl: *))
print(foo(a:4, b:2, cl: /))

print(foo(a:4, b:2) {(a:Int, b:Int) -> Int in return a + b})
print(foo(a:4, b:2) {(a:Int, b:Int) -> Int in a - b})
print(foo(a:4, b:2) {(a, b) in a * b})
print(foo(a:4, b:2) {$0 / $1})

//Capturing
let str = "Hi!"
var cl5: () -> Void = {
   print(str)
}
cl5()

var i = 0
let cl6 = {
    i += 1
}
cl6()
cl6()
print("i = \(i)")

func foo() -> () -> Int {
    var i = 0
    let cl7: () -> Int = {
        i += 1
        return i
    }
    return cl7
}
let j = foo()
print(j())
print(j())

//Sorting
let arr = ["00000", "22", "1", "4444", "333"]
let arr1 = arr.sorted {$0.count > $1.count}
print(arr1)

//Functional
let arr1 = [1, 2, 3, 4, 5, 6]
arr1.forEach {
    print("\($0): \($0*$0)")
}

let arr2 = arr1.filter {
    $0 > 3
}
print(arr2)

let i = arr1.first {
    $0 < 3
}
print(i!)

let arr3 = arr1.map {
    $0 * 2
}
print(arr3)

let arr4 = ["a", "1", "c", "2"]
let arr5:[Int?] = arr4.map {
    Int($0)
}
print(arr5)
let arr6 = arr4.compactMap {
    Int($0)
}
print(arr6)

let sum = arr1.reduce(0) {
    $0 + $1
} //0+1,1+2,3+3,...=21
print(sum)

let dic1 = [100: 2, 50: 3, 200: 2]
let sum2 = dic1.reduce(0) {
    $0 + $1.key * $1.value
} //0+100*2,200+50*3,...=750
print(sum2)

let arr8 = dic1.reduce(into: []) {
    (result, this: (key: Int, value: Int)) in
    for _ in 0 ..< this.value {
        result.append(this.key)
    }
} //[200, 200, 100, 100, 50, 50, 50]
print(arr8)

let nums = [1, 2, 3, 4, 5]
let str = nums
    .filter{
        $0 < 4
    }
    .map{
        String($0)
    }
    .reduce("") {
        $0 + $1
    }
print(str) //"123"
 
var dic11 = ["A":1, "B":2, "C":3]
var arr11 = dic11.map {$0.value}
arr11.sort()
print(arr11) //[1, 2, 3]

var arr9 = [1, 2, 3, 4]
print(arr9.dropFirst())
print(arr9.dropFirst(2))
print(arr9.dropLast())
print(arr9.dropLast(2))
print(arr9.prefix(2))
print(arr9.suffix(2))
arr9.removeAll(where: {$0 >= 3})
print(arr9)
arr9.removeAll()

//Lazy
let first5even = (1...).lazy.filter{$0 % 2 == 0}.prefix(5)
first5even.forEach{print($0)}

Комментариев нет:

Отправить комментарий