NSIndexSet
を高速に列挙できますか?そうでない場合、セット内のアイテムを列挙する最良の方法は何ですか?
高速列挙はオブジェクトを生成する必要があります。 NSIndexSetにはオブジェクトではなくスカラー数(NSUInteger
s)が含まれているため、いいえ、インデックスセットを高速に列挙することはできません。
仮に、それらをNSNumbersにボックス化することはできますが、それほど高速ではありません。
OS X 10.6以降およびiOS SDK 4.0以降では、-enumerateIndexesUsingBlock:
メッセージ:
NSIndexSet *idxSet = ...
[idxSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
//... do something with idx
// *stop = YES; to stop iteration early
}];
Whileループでうまくいくはずです。前のインデックスを使用した後、インデックスを増分します。
/*int (as commented, unreliable across different platforms)*/
NSUInteger currentIndex = [someIndexSet firstIndex];
while (currentIndex != NSNotFound)
{
//use the currentIndex
//increment
currentIndex = [someIndexSet indexGreaterThanIndex: currentIndex];
}
短い答え:いいえ。 NSIndexSet
は <NSFastEnumeration>
プロトコル 。
NSTableView
インスタンスがあるとします(これを*tableView
)、データソースから選択した複数の行を削除できます(ええと... *myMutableArrayDataSource
)、使用:
[myMutableArrayDataSource removeObjectsAtIndexes:[tableView selectedRowIndexes]];
[tableView selectedRowIndexes]
はNSIndexSet
を返します。 NSIndexSet
のインデックスを自分で列挙し始める必要はありません。
これらの答えはSwift 5のIndexSetには当てはまりません。あなたは完全に次のようなものを得ることができます:
let selectedRows:IndexSet = table.selectedRowIndexes
次に、このようなインデックスを列挙します。
for index in selectedRows {
// your code here.
}