47

すばやく列挙できますNSIndexSetか?そうでない場合、セット内のアイテムを列挙するための最良の方法は何ですか?

4

6 に答える 6

146

OSX10.6以降およびiOSSDK4.0以降では、次の-enumerateIndexesUsingBlock:メッセージを使用できます。

NSIndexSet *idxSet = ...

[idxSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
  //... do something with idx
  // *stop = YES; to stop iteration early
}];
于 2010-11-17T21:20:53.830 に答える
22

whileループでうまくいくはずです。前のインデックスを使用した後、インデックスをインクリメントします。

/*int (as commented, unreliable across different platforms)*/
NSUInteger currentIndex = [someIndexSet firstIndex];
while (currentIndex != NSNotFound)
{
    //use the currentIndex

    //increment
    currentIndex = [someIndexSet indexGreaterThanIndex: currentIndex];
}
于 2010-11-17T20:54:10.773 に答える
20

高速列挙はオブジェクトを生成する必要があります。NSIndexSetにNSUIntegerはオブジェクトではなくスカラー数(s)が含まれているため、いいえ、インデックスセットを高速に列挙することはできません。

仮に、それらをNSNumbersにボックス化することはできますが、それほど高速ではありません。

于 2010-11-19T05:49:02.523 に答える
10

簡単な答え:いいえ。 プロトコルNSIndexSetに準拠していません。<NSFastEnumeration>

于 2010-11-17T21:22:46.273 に答える
2

インスタンスがあるとするとNSTableView(それを呼びましょう)、以下を使用して、データソース(ええと..)*tableViewから複数の選択された行を削除できます。*myMutableArrayDataSource

[myMutableArrayDataSource removeObjectsAtIndexes:[tableView selectedRowIndexes]];

[tableView selectedRowIndexes]を返しますNSIndexSet。自分でインデックスの列挙を開始する必要はありませんNSIndexSet

于 2013-12-05T12:53:58.420 に答える
1

これらの答えは、Swift5のIndexSetには当てはまりません。あなたは完全に次のようなものを手に入れることができます:

let selectedRows:IndexSet = table.selectedRowIndexes

次に、次のようにインデックスを列挙します。

for index in selectedRows {
   // your code here.
}
于 2019-07-08T22:08:16.967 に答える