美文网首页
Mattt Thompson文章翻译合集

Mattt Thompson文章翻译合集

作者: BlessNeo | 来源:发表于2017-08-30 14:15 被阅读8次

    从这里转载 摘录

    NSIndex​Set

    NSIndexSet (以及它的可修改子类, NSMutableIndexSet) 是一个排好序的,无重复元素的整数集合。它看上去有点像 支持离散整数的 NSRange .它能用于快速查找特定范围的值的索引,也能用于快速计算交集, 同时,Foundation collection class 提供了很多好用的方法,方便你使用 NSIndexSet.
    Foundataion framework 里面到处可以看到 NSIndexSet 的影子。 任何从已排序容器(比如 array, 或者 table view 的 data source)里面获取多个元素的方法都会用到 NSIndexSet 做为参数。
    如果你仔细看过,你可能会发现你的数据模型可以用NSIndexSet 来表示。比如, AFNetworking 用一个 index set 来代表各个 HTTP 返回码: 用户定义一个 "可接受" 码集合( 默认在 2XX 范围之内的码),放进一个 NSIndexSet, 然后AFNetworking 用 containsIndex: 来检查返回码是否是用户期待的值。
    下面还有一些其它关于 index sets 可能的用途:

    • 如果你想提供一套用户选项,里面全部是开关选项,那么你可以考虑用一个 NSIndexSet, 然后把每个打开的开关选项作为一个 enum typedef值放进去。 (不过开关项用bit操作貌似更方便,只是bit操作受整数位数的限制,适合在开关数量很少的情况下使用。--译者)
    • 想做像某宝那样多条件筛选宝贝?你可以深入研究一下 NSPredicate. 另外一种可供参考的 解决方案是为每个条件创建一个 NSIndexSet 实例,该实例包含所有满足该条件的宝贝的索引值。 然后根据用户筛选条件对这些 NSIndexSet 实例取并集或者交集。 总的来说, NSIndexSet 是一个很实用的类。 它没有其它容器类华丽,但是它有它特定的实用场合。 至少, Foundation 自己用它用的非常多。

    拓展:

    An object representing an immutable collection of unique integer values that bridges to IndexSet
    ; use NSIndexSet when you need reference semantics or other Foundation-specific behavior.

    NSMutableIndexSet 是一个可变的集合

    var indexSet : NSMutableIndexSet = NSMutableIndexSet()
    //添加
    indexSet.add(6)
    indexSet.add(1)
    indexSet.add(in: NSMakeRange(8, 6))
    indexSet.enumerate({ (idx, stop) in
        print("\(idx)")
    })
    //输出 1 6 8 9 10 11 12 13
    //比较 查找
    let a : Int = indexSet.indexGreaterThanIndex(5)
    let b : Int = indexSet.indexGreaterThanOrEqual(to: 5)
    let c : Int = indexSet.indexLessThanIndex(8)
    let d : Int = indexSet.indexLessThanOrEqual(to: 8)
    //取交集
    indexSet.enumerate(in: NSMakeRange(9, 4), options:NSEnumerationOptions.reverse) { (idex, stop) in
        print("\(idex)")
    }
    //输出 12 11 10 9
    

    参考:
    1.IOS NSIndexSet的使用小节

    相关文章

      网友评论

          本文标题:Mattt Thompson文章翻译合集

          本文链接:https://www.haomeiwen.com/subject/stnzdxtx.html