zoukankan      html  css  js  c++  java
  • 关于Swift中的泛函数find的问题

    对于一个数组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})

  • 相关阅读:
    代码规范
    今日头条广告投放
    网络广告计费方式CPM、CPA、CPS、CPT、CPC及比较分析
    dedecms arclist分页
    nginx配置http访问自动跳转到https
    阿里云《nginx服务器配置SSL证书》 配置参数
    JavaScript 通过身份证号获取出生日期、年龄、性别 、籍贯
    Bootstrap自适应各种设备
    css3动画大全
    golang
  • 原文地址:https://www.cnblogs.com/JimmyBright/p/4367441.html
Copyright © 2011-2022 走看看