对于一个数组Array,我们往往需要判断其是否包含某个子项,又或者要查找某个子项是否在这个数组中。

假设有这样一个包含坐标的数组

1    var pointArray:[CGPoint] = [CGPoint(x: 2,y: 3),CGPoint(x: 4,y: 5),CGPoint(x: 2,y: 7),CGPoint(x: 3,y: 8),CGPoint(x: 2,y: 9),CGPoint(x: 0,y: 3)]

如何判断该数组是否包含某个点,这个点的X坐标为3呢?

var a = contains(pointArray, {$0.x == 3})

contains就是一个谓词函数,$0表示复用的数组元素,这个是swift的约定

contains只能返回是否包含该子项,不能返回该子项,如果需要返回该子项所在的索引用find函数

比如查找(4,5)这个点在数组中的索引序号

var index = find(pointArray, CGPoint(x:4,y:5))

运行之后,index = 1

如果你想要查找上面的X坐标为3的点,怎么查询?C#里边有linq语句,和数据库查询类似的语句,无所不能,Swift可没有这么强大,

提供的find函数还不支持谓词的查找(可能以后会加上)

其实自己写这个函数也很简单:

func findIndex<S : SequenceType, L : BooleanType>(seq: S, predicate: (S.Generator.Element) -> L) -> Int?{

for (index,element) in enumerate(seq){

if predicate(element){

return index

}

}

return nil

}

var  b = findIndex(pointArray, predicate: {$0.x == 3})

转载于:https://www.cnblogs.com/JimmyBright/p/4367441.html

关于Swift中的泛函数find的问题相关推荐

  1. 解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题

    swift中开发选择图片上传,会使用到Tap Gesture Recognizer控件,对应 UITapGestureRecognizer API,以下是代码示例(取自IOS developer li ...

  2. Swift 中使用 SQLite——批量更新(事务处理)

    本文是Swift 中使用 SQLite系列的收官之作,介绍一下在数据库中的批量更新. 事务 在准备做大规模数据操作前,首先开启一个事务,保存操作前的数据库的状态 开始数据操作 如果数据操作成功,提交事 ...

  3. Swift 中使用 SQLite——打开数据库

    关于Swift中使用SQLite,接下来可能会分别从打开.增.删.改.查,几个方面来介绍SQLite的具体使用,这一篇重点介绍一下如何打开. 定义全局数据库访问句柄 /// 全局数据库访问句柄 pri ...

  4. 探索 Swift 中的 MVC-N 模式

    作者:Marcus Zarra(twitter:@mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式.这个设计采用 ...

  5. Swift 中的内存管理详解

    这篇文章是在阅读<The Swift Programming Language>Automatic Reference Counting(ARC,自动引用计数)一章时做的一些笔记,同时参考 ...

  6. 怎样在swift中创建CocoaPods

    本文由yake_099(博客)翻译自raywenderlich,作者:Joshua Greene 原文:How to Create CocoaPods with Swift 你可能对一些比较著名的开源 ...

  7. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  8. Swift中依赖注入的解耦策略

    原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...

  9. swift设置启动图不现实_如何通过装饰房屋来开始在Swift中使用增强现实

    swift设置启动图不现实 by Ranadhir Dey 由Ranadhir Dey 如何通过装饰房屋来开始在Swift中使用增强现实 (How to get started with augmen ...

  10. swift视图容器_如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图...

    swift视图容器 by Lee Dowthwaite 通过李道思韦特 如何使用IBDesignable在Swift中创建漂亮的,可重复使用的渐变视图 (How to create a beautif ...

最新文章

  1. 升级bios_ThinkPad如何升级BIOS?我来教你!
  2. 取消java相关网络协议_java相关网络协议可以关掉吗
  3. Python3 From Zero——{最初的意识:007~函数}
  4. 高级组合技打造“完美” 捆绑后门
  5. z变换判断稳定性和因果性_数字信号处理(王娜)-中国大学mooc-题库零氪
  6. linux中的fbset工具,Fluxbox (简体中文)
  7. [转] [Elasticsearch] 数据建模 - 处理关联关系(1)
  8. APP审核关于3.2.1金融资格的审核回复苹果
  9. android实现应用程序只有在第一次启动时显示引导界面
  10. MapXtreme2005开发的经典问题
  11. Hibernate获取'上一条'和'下一条'记录
  12. java futuretask 状态_6.3 FutureTask基本操作总结 - JAVA 并发知识点总结
  13. 手机 html宽度超出屏幕,解决华为手机用rem单位,内容超出屏幕宽度问题
  14. 求和问题总结(leetcode 2Sum, 3Sum, 4Sum, K Sum)
  15. 小米电视机如何重新匹配遥控器
  16. StringTemplate模板引擎
  17. 【题解】A1004 求三个数的平均数
  18. Panda 用法( 基础 )
  19. Python 3如何安装OpenCV
  20. java获取字典所有的key_java字典,多层字典,斗地主发牌,实例展示

热门文章

  1. 【C/C++】转义字符大全
  2. CoreImage的使用及常见滤镜工具(一)
  3. VC6.0 Dialog 如何添加 WM_ERASEBACKGROUND 消息
  4. 2019/7/25 node.js
  5. 数据结构(树状结构-树)
  6. Initramfs 原理和实践
  7. Ubuntu14 Could not open file /var/lib/dpkg/status - open
  8. java设计模式在java中的应用
  9. Object中的clone方法
  10. 【BZOJ 1047】[HAOI2007]理想的正方形