• swift 的高阶函数的使用代码


     1 //: Playground - noun: a place where people can play
     2 
     3 import UIKit
     4 
     5 var str = "Hello, playground"
     6 
     7 /// 使用map函数,进行数组内部数据的转换,map中接受一个转换函数
     8 var array =  [1,2,3,4,5]
     9 var newArray = array.map({$0 * 2})
    10 print(newArray)
    11 
    12 
    13  /// 使用reduce 函数 求和
    14 var sum = array.reduce(0, combine: +)
    15 print(sum)
    16 
    17 
    18 /// 使用 filter来验证tweet中是否包含选定的若干关键字中的一个
    19 let words = ["Swift","iOS","cocoa","OSX","tvOS"]
    20 let tweet = "This is an example tweet larking about Swift"
    21 let valid = !words.filter({tweet.containsString($0)}).isEmpty
    22 print(valid)
    23 
    24 let valid1 = words.contains(tweet.containsString)
    25 print(valid1)
    26 
    27 let valid2 = tweet.characters.split(" ").lazy.map(String.init).contains(Set(words).contains)
    28 print(valid2)
    29 
    30 
    31  /// 使用split map 分隔内容
    32 let text = "窗前明月光 疑是地上霜 举头望明月 低头思故乡"
    33 let lines = text.characters.split(" ").map(String.init)
    34 print(lines[0])
    35 print(lines[1])
    36 print(lines[2])
    37 print(lines[3])
    38 
    39 
    40 /// 使用forEach 高阶函数便利
    41 let name = "urai"
    42 (1...4).forEach({print("Happy Birthday " + (($0 == 3) ? "dear (name)":"to You"))})
    43 (1...4).forEach{print("Happy Birthday " + (($0 == 3) ? "dear (name)":"to You"))}
    44 
    45 
    46 // MARK: - 查找数组中符合条件的数据
    47 extension SequenceType {
    48     
    49     typealias Element = Self.Generator.Element
    50     
    51     func partitionBy(fu: (Element) -> Bool) -> ([Element],[Element]) {
    52         
    53         var first = [Element]()
    54         var second = [Element]()
    55         
    56         for el in self {
    57             
    58             if fu(el) {
    59                 
    60                 first.append(el)
    61             }
    62             else {
    63                 
    64                 second.append(el)
    65             }
    66         }
    67         return (first,second)
    68     }
    69 }
    70 
    71 let part = [82, 58, 76, 49, 88, 90].partitionBy{$0 < 60}
    72 print(part)
    73 
    74 // MARK: - 一种更简介的查找方式
    75 extension SequenceType {
    76     
    77     func anotherpartitionBy(fu: (Self.Generator.Element) -> Bool) -> ([Self.Generator.Element],[Self.Generator.Element]) {
    78         
    79         return (self.filter(fu),self.filter({!fu($0)}))
    80     }
    81 }
    82 
    83 let part1 = [82, 58, 76, 49, 88, 90].anotherpartitionBy{$0 < 60}
    84 print(part1)
    85 
    86 /// 使用的是分区元组,但效率不如上边的高
    87 var part2 = [82, 58, 76, 49, 88, 90].reduce( ([],[]), combine: {
    88     (a:([Int],[Int]),n:Int) -> ([Int],[Int]) in
    89     (n<60) ? (a.0+[n],a.1) : (a.0,a.1+[n])
    90 })
    91 print(part2)

    代码

  • 相关阅读:
    POJ3159 Candies —— 差分约束 spfa
    POJ1511 Invitation Cards —— 最短路spfa
    POJ1860 Currency Exchange —— spfa求正环
    POJ3259 Wormholes —— spfa求负环
    POJ3660 Cow Contest —— Floyd 传递闭包
    POJ3268 Silver Cow Party —— 最短路
    POJ1797 Heavy Transportation —— 最短路变形
    POJ2253 Frogger —— 最短路变形
    POJ1759 Garland —— 二分
    POJ3685 Matrix —— 二分
  • 原文地址:https://www.cnblogs.com/machao/p/5446440.html
Copyright © 2020-2023  润新知