Skip to content
This repository has been archived by the owner on Sep 8, 2023. It is now read-only.

Latest commit

 

History

History
19 lines (14 loc) · 1.9 KB

2012-07-07-nsindexset.md

File metadata and controls

19 lines (14 loc) · 1.9 KB
layout title author translator category
post
NSIndexSet
Mattt
Andrew Yang
Cocoa

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 自己用它用的非常多。