Swift高阶函数contains allSatisfy reversed lexicographicallyPrecedes用法示例

 更新时间:2023年06月20日 11:52:12   作者:loongod  
这篇文章主要为大家介绍了Swift高阶函数contains allSatisfy reversed lexicographicallyPrecedes用法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、contains

返回一个布尔值,指示序列的每个元素是否满足给定的条件。如果有一个满足即返回。

     let expenses = [21.37, 55.21, 9.32, 10.18, 388.77, 11.41]
     let hasBigPurchase = expenses.contains { $0 > 100 }
     // 'hasBigPurchase' == true

Sequence协议源码

  @inlinable
  public func contains(_ element: Element) -> Bool {
    if let result = _customContainsEquatableElement(element) {
      return result
    } else {
      return self.contains { $0 == element }
    }
  }
  @inlinable
  public func contains(
    where predicate: (Element) throws -> Bool
  ) rethrows -> Bool {
    for e in self {
      if try predicate(e) {
        return true
      }
    }
    return false
  }

二、allSatisfy

返回一个布尔值,指示序列的每个元素是否满足给定的条件。需要所有元素都满足。

        let names = ["Sofia", "Camilla", "Martina", "Mateo", "Nicolás"]
        let allHaveAtLeastFive = names.allSatisfy({ $0.count >= 5 })
        // allHaveAtLeastFive == true

Sequence协议源码

allSatisfy里面调用了contains方法

  @inlinable
  public func allSatisfy(
    _ predicate: (Element) throws -> Bool
  ) rethrows -> Bool {
    return try !contains { try !predicate($0) }
  }

三、reversed

返回一个数组,该数组以相反的顺序包含此序列的元素。

let list = [1, 2, 3, 4, 5]
let ret = list.reversed()
print(Array(ret))
---console
[5, 4, 3, 2, 1]

Sequence协议源码

  @inlinable
  public __consuming func reversed() -> [Element] {
    // FIXME(performance): optimize to 1 pass?  But Array(self) can be
    // optimized to a memcpy() sometimes.  Those cases are usually collections,
    // though.
    var result = Array(self)
    let count = result.count
    for i in 0..<count/2 {
      result.swapAt(i, count - ((i + 1) as Int))
    }
    return result
  }

四、lexicographicallyPrecedes

返回一个布尔值,该值指示在字典顺序(字典)中该序列是否在另一个序列之前,使用给定条件语句比较元素。

let list = [1, 2, 3, 4, 5]
let list2 = [2, 2, 3, 5]
let ret1 = list.lexicographicallyPrecedes(list2)
let ret2 = list2.lexicographicallyPrecedes(list)
print(ret1, ret2)
---console
true false

Sequence协议源码

  @inlinable
  public func lexicographicallyPrecedes<OtherSequence: Sequence>(
    _ other: OtherSequence
  ) -> Bool where OtherSequence.Element == Element {
    return self.lexicographicallyPrecedes(other, by: <)
  }
  @inlinable
  public func lexicographicallyPrecedes<OtherSequence: Sequence>(
    _ other: OtherSequence,
    by areInIncreasingOrder: (Element, Element) throws -> Bool
  ) rethrows -> Bool 
  where OtherSequence.Element == Element {
    var iter1 = self.makeIterator()
    var iter2 = other.makeIterator()
    while true {
      if let e1 = iter1.next() {
        if let e2 = iter2.next() {
          if try areInIncreasingOrder(e1, e2) {
            return true
          }
          if try areInIncreasingOrder(e2, e1) {
            return false
          }
          continue // Equivalent
        }
        return false
      }
      return iter2.next() != nil
    }
  }

以上就是Swift高阶函数contains allSatisfy reversed lexicographicallyPrecedes用法示例的详细内容,更多关于Swift高阶函数用法的资料请关注脚本之家其它相关文章!

相关文章

  • Swift心得笔记之函数

    Swift心得笔记之函数

    函数是执行特定任务的代码自包含块。通过给定一个函数名称标识它是什么,并在需要的时候使用该名称来调用函数以执行任务。今天我们就来探讨下swift中的函数问题。
    2015-04-04
  • Objective-C中的block与Swift中的尾随闭包使用教程

    Objective-C中的block与Swift中的尾随闭包使用教程

    Block是OC中的闭包,他和swift中的闭包有什么区别呢?下面这篇文章就来给大家介绍关于Objective-C中的block与Swift中的尾随闭包使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-12-12
  • RxSwift学习之Observable的新建、订阅及取消订阅

    RxSwift学习之Observable的新建、订阅及取消订阅

    这篇文章主要给大家介绍了关于RxSwift学习教程之Observable的相关资料,文中详细的给大家介绍了关于新建Observable、订阅Observable和取消订阅并消除内存泄漏等相关的内容,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Swift、Objective-C、Cocoa混合编程设置指南

    Swift、Objective-C、Cocoa混合编程设置指南

    这篇文章主要介绍了Swift、Objective-C、Cocoa混合编程设置指南,需要的朋友可以参考下
    2014-07-07
  • R.swift的使用与安装教程

    R.swift的使用与安装教程

    这篇文章主要给大家介绍了关于R.swift使用与安装的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 浅谈Swift编程中switch与fallthrough语句的使用

    浅谈Swift编程中switch与fallthrough语句的使用

    这篇文章主要介绍了Swift编程中switch与fallthrough语句的使用,用于基本的流程控制,需要的朋友可以参考下
    2015-11-11
  • Swift心得笔记之控制流

    Swift心得笔记之控制流

    控制流(Control Flow)我不想这么译的。。。我更想叫控制语句,但是想想,这么叫也没错,意指流程控制。大部分用法跟C类似。
    2015-04-04
  • Swift 中闭包的简单使用

    Swift 中闭包的简单使用

    这篇文章主要介绍了Swift 中闭包的简单使用的相关资料,需要的朋友可以参考下
    2016-10-10
  • SwiftUI智能家居开关灯页面搭建示例

    SwiftUI智能家居开关灯页面搭建示例

    这篇文章主要为大家介绍了SwiftUI智能家居开关灯页面搭建示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 解决 Xcode 6-Beta2 智能提示bug

    解决 Xcode 6-Beta2 智能提示bug

    最近开始学习 Swift ,因为感觉这个真是个不错的东西,有很多新的特性,虽然 Titanium 之后也必定会支持,但总有不少东西要使用原生开发才可以实现,所以就乘这个新语言出来之际开始学习啦!
    2014-07-07

最新评论