swift 5関数とCollection

13517 ワード

記事の目次
  • 、関数
  • 1.Fnc宣言機能を使用する:
  • .複数の戻り値
  • を返す.
  • .可変パラメータ
  • .関数の内部に関数
  • を埋め込むことができます.
  • .関数の戻り値は、関数
  • とすることができる.
  • .関数パラメータは、関数
  • でありうる.
  • .クローズドを{}で作成する
  • .クローズドの他の書き方
  • 、コレクション
  • 1.Aray
  • 1.1空き行列を作成します.
  • 1.2用[]定義配列

  • 1.3は1つの配列を作成し、配列の初期値
  • である.
  • 1.4配列スプライス
  • 1.5使用.count対配列カウント
  • 1.6使用.isEmpty判定配列が空かどうか
  • 1.7 appndを使用して要素を追加する
  • 1.8配列インデックス
  • 1.9一括補正
  • 1.10挿入要素
  • 1.11要素を除去する
  • 1.12エルゴード配列
  • .セット
  • 2.1空きセットを作成する
  • 2.2挿入要素
  • 2.3セット初期化、自動推定タイプおよびいくつかの一般関数
  • 2.4セットは
  • を巡回しました.
  • 2.5並べ替え
  • 2.6セット演算
  • 2.7セットの間の関係
  • .Dictionary
  • 3.1辞書と割当値
  • を作成する.
  • 3.2常用関数
  • 3.3エルゴード
  • (コードがハイライトされていないようです.このマークダウンの問題です.)
    一、関数
    1.func宣言関数を使う:
    func greet(name: String, day: String) -> String {
        return "Hello \(name), today is \(day)."
    }
    greet(name: "Bob", day: "Tuesday")
    
    標準出力:
    Hello Bob, today is Tuesday.
    
    2.複数の戻り値を返します.
    func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
        var min = scores[0]
        var max = scores[0]
        var sum = 0
    
        for score in scores {
            if score > max {
                max = score
            } else if score < min {
                min = score
            }
            sum += score
        }
    
        return (min, max, sum)
    }
    let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9])
    print(statistics.sum)
    print(statistics.2)
    print(statistics.min)
    
    標準出力:
    120
    120
    3
    
    3.可変パラメータ
    func sumOf(numbers: Int...) -> Int {
        var sum = 0
        for number in numbers {
            sum += number
        }
        return sum
    }
    print(sumOf())
    print(sumOf(numbers: 2, 1, 3))
    
    
    標準出力:
    0
    6
    
    パラメータは配列ではなく、複数のIntのみです.
    4.関数の内部に関数を埋め込むことができます.
    func returnFifteen() -> Int {
        var y = 10
        func add() {
            y += 5
        }
        add()
        return y
    }
    print(returnFifteen())
    
    標準出力:
    15
    
    埋め込み関数は、外部関数の変数を使用できます.
    4.関数の戻り値は、関数としても良いです.
    func makeIncrementer() -> ((Int) -> Int) {
        func addOne(number: Int) -> Int {
            return 1 + number
        }
        return addOne
    }
    var increment = makeIncrementer()
    print(increment(7))
    
    標準出力:
    8
    
    5.関数のパラメータは、関数であることができます.
    func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
        for item in list {
            if condition(item) {
                return true
            }
        }
        return false
    }
    func lessThanTen(number: Int) -> Bool {
        return number < 10
    }
    var numbers = [20, 19, 7, 12]
    print(hasAnyMatches(list: numbers, condition: lessThanTen))
    
    標準出力:
    true
    
    6.{}でクローズドを作成する
    var numbers = [20, 19, 7, 12]
    print(numbers.map({
        (number: Int) -> Int in
        let result = 3 * number
        return result
    }))
    print(numbers)
    
    パラメータと関数体をinゾーンで分ける
    標準出力:
    [60, 57, 21, 36]
    [20, 19, 7, 12]
    
    7.クローズドの他の書き方
    下のmapとsort
    var numbers = [20, 19, 7, 12]
    let mappedNumbers = numbers.map({ number in 3 * number })
    print(mappedNumbers)
    let sortedNumbers = numbers.sort{ $0 > $1 }
    print(sortedNumbers)
    print(numbers)
    
    [60, 57, 21, 36]
    ()
    [20, 19, 12, 7]
    
    二、コレクション
    1.アラy
    1.1空の配列を作成します.
    var someInts = [Int]()
    print(someInts.count)
    let someInts2 = [Int]()
    print(someInts2.count)
    
    標準出力:
    0
    0
    
    letで宣言するタイプはすべて可変ではなく、対象メモリアドレスは固定されています.
    var someInts = [Int]()
    print(someInts.count)
    let someInts2 = [Int]()
    print(someInts2.count)
    
    someInts.append(2)
    someInts2.append(2)
    
    コンパイルエラー:
    Main.swift:7:11: error: cannot use mutating member on immutable value: 'someInts2' is a 'let' constant
    someInts2.append(2)
    ~~~~~~~~~ ^
    Main.swift:3:1: note: change 'let' to 'var' to make it mutable
    let someInts2 = [Int]()
    ^~~
    var
    
    1.2[]で配列を定義する
    var shopList: [String] = ["egg", "potato", "milk"]
    print(shopList)
    
    標準出力:
    ["egg", "potato", "milk"]
    
    var shopList: [String]? = ["egg", "potato", "milk"]
    print(shopList)
    
    標準出力:
    Optional(["egg", "potato", "milk"])
    
    配列要素が一つのタイプの場合、例えばStringであれば、swiftはこの配列タイプをStringとして自動的に認識します.
    var shopList = ["egg", "potato", "milk"]
    print(shopList)
    
    標準出力:
    ["egg", "potato", "milk"]
    
    1.3配列を作成し、配列の初期値を割り当てます.
    var Doubles = Array(repeating: 1.0, count: 10)
    print("the Doubles are: \(Doubles)")
    
    標準出力:
    the Doubles are: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
    
    1.4配列スティッチング
    異なるタイプの配列は、IntとDoubleのようなスティッチングできません.
    var array1 = Array(repeating: 2.5, count: 3)
    var array2 = [1, 2, 3, 4, 5]
    var sumArray = array1 + array2
    print(sumArray)
    
    コンパイルエラー:
    Main.swift:3:25: error: cannot convert value of type '[Int]' to expected argument type 'Array'
    var sumArray = array1 + array2
                            ^
    Main.swift:3:25: note: arguments to generic parameter 'Element' ('Int' and 'Double') are expected to be equal
    var sumArray = array1 + array2
    
    var array1 = Array(repeating: 2.5, count: 3)
    var array2 = [1.0, 2, 3, 4, 5]
    var sumArray = array1 + array2
    print(sumArray)
    
    標準出力:
    [2.5, 2.5, 2.5, 1.0, 2.0, 3.0, 4.0, 5.0]
    
    +=を使って配列をつなぎ合わせることもできます.
    1.5使用.count対配列数
    var shopList: [String]? = ["egg", "potato", "milk"]
    print(shopList.count)
    
    コンパイルエラー:
    Main.swift:2:7: error: value of optional type '[String]?' must be unwrapped to refer to member 'count' of wrapped base type '[String]'
    print(shopList.count)
          ^
    Main.swift:2:7: note: chain the optional using '?' to access member 'count' only for non-'nil' base values
    print(shopList.count)
          ^
                  ?
    Main.swift:2:7: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
    print(shopList.count)
          ^
                  !
    
    var shopList: [String] = ["egg", "potato", "milk"]
    print(shopList.count)
    
    標準出力:
    3
    
    1.6使用.isEmpty判定配列が空かどうか
    1.7 appndを使用して要素を追加する
    1.8配列インデックス
    var shopList: [String] = ["egg", "potato", "milk"]
    shopList[0] = "apple"
    print(shopList)
    
    標準出力:
    ["apple", "potato", "milk"]
    
    var shopList: [String]? = ["egg", "potato", "milk"]
    shopList[0] = "apple"
    print(shopList)
    
    コンパイルエラー:
    Main.swift:2:1: error: value of optional type '[String]?' must be unwrapped to refer to member 'subscript' of wrapped base type '[String]'
    shopList[0] = "apple"
    ^
    Main.swift:2:1: note: chain the optional using '?' to access member 'subscript' only for non-'nil' base values
    shopList[0] = "apple"
    ^
            ?
    Main.swift:2:1: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
    shopList[0] = "apple"
    ^
            !
    Main.swift:3:7: warning: expression implicitly coerced from '[String]?' to 'Any'
    print(shopList)
          ^~~~~~~~
    Main.swift:3:7: note: provide a default value to avoid this warning
    print(shopList)
          ^~~~~~~~
                   ?? 
    Main.swift:3:7: note: force-unwrap the value to avoid this warning
    print(shopList)
          ^~~~~~~~
                  !
    Main.swift:3:7: note: explicitly cast to 'Any' with 'as Any' to silence this warning
    print(shopList)
          ^~~~~~~~
                   as Any
    
    1.9一括修正
    var array = ["a", "b", "c", "d", "e"]
    print(array)
    array[1...3] = ["1", "2", "3"]
    print(array)
    
    標準出力:
    ["a", "b", "c", "d", "e"]
    ["a", "1", "2", "3", "e"]
    
    1.10要素を挿入する
    var array = ["a", "b", "c", "d", "e"]
    print(array)
    array.insert("index", at: 1)
    print(array)
    
    ["a", "b", "c", "d", "e"]
    ["a", "index", "b", "c", "d", "e"]
    
    1.11要素を削除
    var array = ["a", "b", "c", "d", "e"]
    print(array)
    array.remove(at: 3)
    print(array)
    
    標準出力:
    ["a", "b", "c", "d", "e"]
    ["a", "b", "c", "e"]
    
    1.12エルゴード配列
    var array = ["a", "b", "c", "d", "e"]
    for i in array{
        print(i)
    }
    
    for(index, value) in array.enumerated(){
        print("Element \(index + 1): \(value)")
    }
    
    標準出力:
    a
    b
    c
    d
    e
    Element 1: a
    Element 2: b
    Element 3: c
    Element 4: d
    Element 5: e
    
    2.セット
    2.1空セットを作成する
    var letters = Set()
    print(letters.count)
    
    標準出力:
    0
    
    2.2要素の挿入
    var letters = Set()
    letters.insert("a")
    print(letters)
    letters = []
    print(letters)
    
    letters=[]はタイプを変えません.相変わらず集合です.配列ではありません.
    標準出力:
    ["a"]
    []
    
    2.3セット初期化、自動推定タイプおよびいくつかの一般的な関数
    var words: Set = ["index", "elastic", "java", "python"]
    print(words)
    print(words.count)
    print(words.isEmpty)
    print(words.remove("java"))
    print(words)
    print(words.contains("python"))
    
    標準出力:
    ["elastic", "java", "index", "python"]
    4
    false
    Optional("java")
    ["elastic", "index", "python"]
    true
    
    2.4集合エルゴード
    var words: Set = ["index", "elastic", "java", "python"]
    for word in words{
        print("\(word)")
    }
    
    標準出力:
    java
    index
    python
    elastic
    
    2.5並べ替え
    var words: Set = ["index", "elastic", "java", "python"]
    for word in words.sorted(){
        print("\(word)")
    }
    
    標準出力:
    elastic
    index
    java
    python
    
    2.6集合演算
    var oddDigits: Set = [1, 3, 5, 7, 9]
    var evenDigits: Set = [0, 2, 4, 6, 8]
    var primeNumbers = [2, 3, 5, 7]
    
    print(oddDigits.union(evenDigits).sorted())
    print(oddDigits.intersection(evenDigits).sorted())
    print(oddDigits.subtracting(primeNumbers).sorted())
    print(oddDigits.symmetricDifference(primeNumbers).sorted())
    
    標準出力:
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    []
    [1, 9]
    [1, 2, 9]
    
    2.7集合間の関係
    var oddDigits: Set = [1, 3, 5, 7, 9]
    var evenDigits: Set = [0, 2, 4, 6, 8]
    var primeNumbers: Set = [3, 5, 7]
    
    print(primeNumbers.isSubset(of: oddDigits))
    print(oddDigits.isSuperset(of: primeNumbers))
    print(oddDigits.isDisjoint(with: evenDigits))
    
    標準出力:
    true
    true
    true
    
    3.Dictionary
    3.1辞書と割賦を作成する
    var nameOfIntegers = [Int: String]()
    print(nameOfIntegers)
    nameOfIntegers[2] = "two"
    nameOfIntegers[3] = "three"
    print(nameOfIntegers)
    nameOfIntegers = [:]
    print(nameOfIntegers)
    
    var nameOfIntegers2 = [1:"one", 2:"two"]
    print(nameOfIntegers2)
    
    標準出力:
    [:]
    [2: "two", 3: "three"]
    [:]
    [2: "two", 1: "one"]
    
    3.2常用関数
    var nameOfIntegers = [1:"one", 2:"two"]
    print(nameOfIntegers)
    print(nameOfIntegers.count)
    print(nameOfIntegers.isEmpty)
    
    if let oldvalue = nameOfIntegers.updateValue("new one", forKey: 1){
        print("The old value for 1 was \(oldvalue)")
    }
    
    標準出力:
    [1: "one", 2: "two"]
    2
    false
    The old value for 1 was one
    
    var nameOfIntegers = [1:"one", 2:"two"]
    print(nameOfIntegers)
    
    if let three = nameOfIntegers[3]{
        print("has 3")
    }
    else{
        print("no 3")
    }
    
    標準出力:
    [1: "one", 2: "two"]
    no 3
    
    var nameOfIntegers = [1:"one", 2:"two"]
    print(nameOfIntegers)
    
    nameOfIntegers[1] = nil
    print(nameOfIntegers)
    
    標準出力:
    [2: "two", 1: "one"]
    [2: "two"]
    
    name OfIntegers.removeValue(forKey:1)も使用できます.
    3.3遍歴
    var nameOfIntegers = [1:"one", 2:"two"]
    print(nameOfIntegers)
    
    for (key, value) in nameOfIntegers{
        print("\(key): \(value)")
    }
    
    for key in nameOfIntegers.keys{
        print(key)
    }
    for value in nameOfIntegers.values{
        print(value)
    }
    
    標準出力:
    [1: "one", 2: "two"]
    1: one
    2: two
    1
    2
    one
    two
    
    辞書には前の配列とセットの並べ替え方法がありません.順序を変えるには、keysを並べ替えることができます.